如何在Python中合并200个csv文件

Chu*_*uck 73 python csv merge concatenation

伙计们,我这里有200个单独的csv文件,从SH(1)到SH(200)命名.我想将它们合并到一个csv文件中.我该怎么做?

wis*_*sty 82

正如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()
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用`f .__ next __()`而不是python3.x中的`f.next()`. (6认同)
  • 只需注意:可以使用`with open`语法并避免手动`.close()`文件. (4认同)
  • f.next()和f .__ next __()有什么区别?当我使用前者时,我得到了'_io.TextIOWrapper'对象没有属性'next' (2认同)

bli*_*say 51

你为什么不能这么做sed 1d sh*.csv > merged.csv

有时你甚至不必使用python!

  • 在Windows上,C:\> copy*.csv merged.csv (14认同)
  • 如何在不复制第一个后续文件的头文件信息的情况下使用此命令?我似乎反复弹出标题信息. (4认同)
  • 从一个文件复制头信息:sed -n 1p some_file.csv> merged_file.csv从所有其他文件中复制除最后一行之外的所有文件:sed 1d*.csv >> merged_file.csv (3认同)
  • 我不小心执行了“sed 1d *.csv > merged.csv”,并且在我的计算机因没有剩余存储空间而崩溃之前运行了一段时间!:( (3认同)
  • @blinsay它将每个CSV文件中的标头也添加到合并的文件中。 (2认同)
  • 如果您不需要删除标题,这很棒! (2认同)

sco*_*tle 39

使用接受的StackOverflow答案创建要附加的csv文件列表,然后运行此代码:

import pandas as pd
combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] )
Run Code Online (Sandbox Code Playgroud)

如果要将其导出到单个csv文件,请使用:

combined_csv.to_csv( "combined_csv.csv", index=False )
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 16

fout=open("out.csv","a")
for num in range(1,201):
    for line in open("sh"+str(num)+".csv"):
         fout.write(line)    
fout.close()
Run Code Online (Sandbox Code Playgroud)


Nor*_*ldt 11

我将通过篮子中的另一个代码示例

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)
Run Code Online (Sandbox Code Playgroud)

  • @Andy我没有看到stackoverflow之间的区别提醒我投票给答案我提醒人们分享他们的赞赏(通过投票),如果他们发现我的答案有用.我知道这不是Facebook,我不是一个喜欢猎人的人. (2认同)
  • 它已经被[讨论过](http://meta.stackexchange.com/a/63440/186281)[以前](http://meta.stackexchange.com/a/194063/186281),并且每次都被[认为](http://meta.stackexchange.com/questions/167155/comments-asking-for-upvotes-accepts) 不可接受。 (2认同)

Ale*_*lli 10

这取决于你所说的"合并" - 他们有相同的列吗?他们有标题吗?例如,如果它们都具有相同的列,并且没有标题,则简单的连接就足够了(打开目标文件进行写入,遍历每个用于读取的源,使用shutil.copyfileobj从open-for-reading源到open-for-writing目的地,关闭源代码,保持循环 - 使用该with语句代表您完成结束.如果它们具有相同的列,但也有标题,则在将readline每个源文件复制到目标之前打开它以进行读取之后,除了第一个文件之外,您将需要一个,以跳过标题行.

如果CSV文件并非都具有相同的列,那么您需要定义在哪种意义上"合并"它们(如SQL JOIN?或"水平",如果它们都具有相同数量的行?等等) ) - 在这种情况下,我们很难猜出你的意思.