我正在尝试将一个 csv 文件中的多行组合在一起。我可以在 Excel 中轻松完成,但我想对数百个文件执行此操作,因此我需要它作为代码。我曾尝试将行存储在数组中,但它似乎不起作用。我正在使用 Python 来完成它。
假设我有一个 csv 文件;
1,2,3
4,5,6
7,8,9
我只想拥有一个这样的csv文件;
1,2,3,4,5,6,7,8,9
我试过的代码是这样的;
fin = open("C:\\1.csv", 'r+')
fout = open("C:\\2.csv",'w')
for line in fin.xreadlines():
new = line.replace(',', ' ', 1)
fout.write (new)
fin.close()
fout.close()
你能帮忙吗?
最佳答案
您应该使用 csv
模块,因为在逗号上手动拆分 CSV 非常容易出错(单列可以包含带逗号的字符串,但您最终会错误地将其拆分为多列)。 CSV 模块使用值列表来表示单行。
import csv
def return_contents(file_name):
with open(file_name) as infile:
reader = csv.reader(infile)
return list(reader)
data1 = return_contents('csv1.csv')
data2 = return_contents('csv2.csv')
print(data1)
print(data2)
combined = []
for row in data1:
combined.extend(row)
for row in data2:
combined.extend(row)
with open('csv_out.csv', 'w', newline='') as outfile:
writer = csv.writer(outfile)
writer.writerow(combined)
该代码为您提供了该方法的基础,但将其扩展到数百个文件会很丑陋。相反,您可能想要 os.listdir
将所有文件一个一个地拉到一个目录中,并将它们添加到您的输出中。这就是我将阅读代码打包到return_contents
函数中的原因;我们可以只用一组代码对不同的文件重复相同的过程数百万次来进行实际读取。像这样:
import csv
import os
def return_contents(file_name):
with open(file_name) as infile:
reader = csv.reader(infile)
return list(reader)
all_files = os.listdir('my_csvs')
combined_output = []
for file in all_files:
data = return_contents('my_csvs/{}'.format(file))
for row in data:
combined_output.extend(row)
with open('csv_out.csv', 'w', newline='') as outfile:
writer = csv.writer(outfile)
writer.writerow(combined_output)
关于python - 使用 Python 在 csv 文件中将两行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670209/