伙计们,我这里有200个单独的csv文件,从SH(1)到SH(200)命名.我想将它们合并到一个csv文件中.我该怎么做?
正如ghostdog74所说,但这次有标题:
fout=open("out.csv","a") # first file: for line in open("sh1.csv"): fout.write(line) # now the rest: for num in range(2,201): f = open("sh"+str(num)+".csv") f.next() # skip the header for line in f: fout.write(line) f.close() # not really needed fout.close()
你为什么不能这么做sed 1d sh*.csv > merged.csv
?
有时你甚至不必使用python!
使用接受的StackOverflow答案创建要附加的csv文件列表,然后运行此代码:
import pandas as pd combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] )
如果要将其导出到单个csv文件,请使用:
combined_csv.to_csv( "combined_csv.csv", index=False )
fout=open("out.csv","a") for num in range(1,201): for line in open("sh"+str(num)+".csv"): fout.write(line) fout.close()
我将通过篮子中的另一个代码示例
from glob import glob with open('singleDataFile.csv', 'a') as singleFile: for csvFile in glob('*.csv'): for line in open(csvFile, 'r'): singleFile.write(line)
这取决于你所说的"合并" - 他们有相同的列吗?他们有标题吗?例如,如果它们都具有相同的列,并且没有标题,则简单的连接就足够了(打开目标文件进行写入,遍历每个用于读取的源,使用shutil.copyfileobj从open-for-reading源到open-for-writing目的地,关闭源代码,保持循环 - 使用该with
语句代表您完成结束.如果它们具有相同的列,但也有标题,则在将readline
每个源文件复制到目标之前打开它以进行读取之后,除了第一个文件之外,您将需要一个,以跳过标题行.
如果CSV文件并非都具有相同的列,那么您需要定义在哪种意义上"合并"它们(如SQL JOIN?或"水平",如果它们都具有相同数量的行?等等) ) - 在这种情况下,我们很难猜出你的意思.