Python创建一个字典并将它们交换到另一个fi中

2024-10-01 22:43:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个制表符分隔的.csv文件。从一个.csv我创建了一本字典,它看起来像:

'EB2430': ' "\t"idnD "\t"yjgV "\t"b4267 "\n',
'EB3128': ' "\t"yagE "\t\t"b0268 "\n',
'EB3945': ' "\t"maeB "\t"ypfF "\t"b2463 "\n',
'EB3944': ' "\t"eutS "\t"ypfE "\t"b2462 "\n',

我想把这本词典的价值插入第二.csv文件如下所示:

^{pr2}$

带分隔符的结果输出选项卡:

'EB2430'   idnD   yjgV   b4267   36.81   364 222 4   72  430 101 461 1.00E-063   237
'EB3128'   yagE   b0268   26.04   169 108 6   42  206 17  172 6.00E-006   45.8
'EB3945'   maeB   ypfF   b2463   20.6    233 162 6   106 333 33  247 6.00E-005   42.4
'EB3944'   eutS   ypfE   b2462   19.07   367 284 6   1   355 1   366 2.00E-023   103

以下是我创建字典的代码:

f = open ("one.csv", "r")
g = open ("second.csv", "r")
eb = []
desc = []
di = {} 

for line in f:
    for row in f:
        eb.append(row[1:7])
        desc.append(row[7:])

di = dict(zip(eb,desc))

很抱歉这么长时间没说!!我编程时间不长。在

干杯!在

周六


Tags: 文件csv字典descrowebyagemaeb
3条回答

这里似乎可以更有效地使用Python标准库csv模块。而不是自己“手动”执行文本处理部分。E、 g.:

import csv
with open("one.csv", "r") as f:
  rows_one = list(csv.reader(f, delimiter='\t'))
with open("second.csv", "r") as g:
  rows_two = list(csv.reader(g, delimiter='\t'))
rows_totl = [r + s[1:] for r, s in zip(rows_one, rows_two)]
with open("total.csv", "w") as h:
  csv.writer(h, delimiter='\t').writerows(rows_totl)

with语句是Python2.6中的一颗明珠(它也可以在2.5中使用,但前提是from __future__ import with_statement!-)正如这里使用的,它提供了一个打开的文件,并确保在with主体完成后立即关闭它。。。另外,它还有无数的用途,例如锁和各种自定义编码的“上下文管理器”。在

我建议您不要手动解析CSV文件,而是使用内置的csv。它处理分隔符、字符转义等。它的API也很简单:

import csv

# Auto-detector of this particular CSV dialect (delimiters and such)
dialect = csv.Sniffer().sniff(open('one.csv').read())

# csv.reader yields every row found in the file using the given dialect
rows = csv.reader(open('one.csv'), dialect = dialect)

# [list comprehension][2]
resulting_dict = dict((row[0], row[1:]) for row in rows)

您可以将代码重构为一个函数,并将其用于两个文件(不过,从内存进行编码,请小心出错)。在

现在有两个dict分别对应两个文件,比如dict1和{},可以将它们组合起来:

^{pr2}$

将其写入.csv文件也很简单:

writer = csv.writer(open('second.csv', 'w'), delimiter = '\t')
for key, values in combined_dict:
    writer.writerow(key, *values)

一定要查看docs以获得更详细的参考。在

编辑:我的解决方案没有考虑行顺序(dict是无序的)。有两种解决方案:

  • 如果运行的是Python3或Python2.7,请使用集合.OrderedDict在
  • 否则,您需要存储行的顺序-例如,在读取第二个文件时,将列表理解分解为标准的for语句,并将标题存储在列表中。在

查看csv模块:

import csv
reader1 = csv.reader(open('input1.csv'), delimiter = '\t')
reader2 = csv.reader(open('input2.csv'), delimiter = '\t')
csvwriter = csv.writer(open('output.csv', 'w'),delimiter = '\t')
while True:
    row1 = reader1.next()
    if row1:
       row2 = reader2.next()
       new_row = row2 + row1[1:]
       csvwriter.writerow(new_row)
    else:
        break

相关问题 更多 >

    热门问题