我正在尝试创建一个脚本,该脚本将编写一个CSV文件,其中包含来自两个单独输入文件的列。我在尝试在两个输入文件上使用csv.Dictreader()
以便可以轻松引用要写入的文件中的列时遇到问题。使用 print
,似乎两个词典中的键都被正确理解,但只有一个词典(放在脚本中的第一个)的信息被正确写入,而第二个词典只会写入每行中的第一个值。
输入文件的示例:
文件1.csv
A,B
1,2
3,4
5,6
文件2.txt
1.11
2.22
3.33
我想创建的输出文件,第一列是 C,第二列是 A:
输出.csv
1.11 1
2.22 3
3.33 5
这是我到目前为止的代码:
import csv
with open('file1.csv', 'rb') as FileOne:
with open('file2.txt', 'rb') as FileTwo
with open('output.csv', 'wb') as OutFile:
LabelsOne = ['A', 'B']
LabelsTwo = ['C']
inf.next()
DictOne = csv.DictReader(FileOne, LabelsOne, skipinitialspace=True)
DictTwo = csv.DictReader(FileTwo, LabelsTwo, skipinitialspace=False)
outf = csv.writer(OutFile, delimiter='t')
for DataOne in DictOne:
for DataTwo in DictTwo:
DataOne.update(DataTwo)
outf.writerow([DataOne['C'], DataOne['A']])
但是现在我得到的输出要么是
1.11 1
2.22 1
3.33 1
或
1.11 1
1.11 3
1.11 5
取决于我是把for DataOne in DictOne
还是for DataTwo in DictTwo
放在第一位。我已经浏览了有关使用CSV词典的其他讨论,但没有找到其他解决此问题的人。两个词典中的键都得到了明确的识别,但只有一个被正确编写。是否可以同时使用两个字典写入输出文件?
我知道打开 CSV 文件并将列复制/粘贴到新文档中通常会更容易,但我需要此过程在许多文件上重复并作为批处理的一部分。
你根本不想要嵌套循环,请尝试改用zip()
:
for DataOne, DataTwo in zip(DictOne, DictTwo):
DataOne.update(DataTwo)
outf.writerow([DataOne['C'], DataTwo['A']])