python - 如何将 2 个不同文件中的列添加到 CSV python 的输出中

标签 python csv

我的测试.csv

1,1,2
2,1,3
3,1,4

我的 test2.csv

2,3
2,3
2,3

如何制作输出.csv:

1,1,2,2,3
2,1,3,2,3
3,1,4,2,3

那么要将两个 csv 文件合并为一个吗?

这是我的代码

import csv, os, sys
with open('test.csv', 'rb') as input, open('output.csv', 'wb') as output, open ('test2.csv', 'rb') as input2:
        reader = csv.reader(input, delimiter = ',')
        reader2 = csv.reader(input2, delimiter = ',')
        writer = csv.writer(output, delimiter = ',')

        all = []                                        
        header = next(reader)
        all.append(header)
        count = 0
        for row,row2 in reader and reader2:
                count += 1
                while count:
                        all.append(row+row2)
                        break
        writer.writerows(all)

显然这不起作用,但是有人明白我要做什么吗?

最佳答案

使用zip()一次迭代两个读者:

reader1 = csv.reader(input, delimiter = ',')
reader2 = csv.reader(input2, delimiter = ',')

for row1, row2 in zip(reader1, reader2):
    writer.writerow(row1 + row2)

或更短的版本:

writer.writerows(map(list.__add__, row1, row2))

如果文件很大,那么在 Python 2 中使用 mapzip 并不是一个好主意,因为它们会加载两个文件中的所有行,最好选择其中存在的迭代器版本 itertools 模块:itertools.imapitertools.izip :

for row,row2 in reader and reader2: 相当于仅迭代 reader2 因为 and works像这样:

>>> 1 and 2 
2
>>> 2 and 3
3
>>> 0 and 2  # returned the first falsy value, but as an iterator is not a falsy value
0            # so it will return `reader2` in your case.

更新:

要就地更新 test2.csv,您可以使用 fileinput 模块,但这样您将无法使用 csv 模块。

>>> import fileinput
>>> with open('test.csv') as f:
    for line in fileinput.input('test2.csv', inplace=True):
        print next(f).rstrip() + ',' + line,
...         
>>> !cat test2.csv
1,1,2,2,3
2,1,3,2,3
3,1,4,2,3

使用 csv 模块,您必须首先读取内存中 test2.csv 中的所有行,然后将新数据写入其中。

with open('test.csv') as f1, open('test2.csv', 'r+') as f2:
                                   #open in r+ mode
   reader1 = csv.reader(f1)
   rows_f2 = list(csv.reader(f2)) #read all the rows
   f2.truncate(0)                 #truncate the file
   writer = csv.writer(f2)
   writer.writerows(map(list.__add__, reader1, rows_f2))

关于python - 如何将 2 个不同文件中的列添加到 CSV python 的输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362226/

相关文章:

Python 将列表值转换为字符串

python - django 管理站点导航侧边栏搞砸了

python - 如何使用 Python 从 URL 读取 CSV 文件?

python - 如果前一个字段为空,则用以前的数据填充表中的下一个字段

.net - Powershell - 在不安装 Excel 的情况下将 CSV 转换为 XLS

python - 如何在 flask wtforms 验证器中使用 current_user

jquery - Flask View 的 JSON "POST"不起作用

python - 如何将多条曲线拟合到单个数据散点图?

mysql - 是否可以从Excel文件生成ER图

javascript - csv数据到d3中的嵌套json树