2013-07-11 27 views
1

我需要从Python程序员一些帮助解决我所面临的处理数据,在问题: -Python - 精梳来自不同.csv文件的数据。成一个

  • 我放在这样的目录结构的.csv文件: -

    - MainDirectory

    • Sub目录1
      • 子目录1A
        • fil.csv
    • Sub目录2
      • 子目录2A
        • FILE.CSV
    • 子目录3
      • 子目录3A
        • FILE.CSV

    而不是去到每个目录和访问该.csv文件,我想运行一个脚本,可以结合所有子目录的数据。

每个文件具有相同类型的标题。我只需要保留一个大的.csv文件,只有一个头文件,所有的.csv文件数据都可以一个接一个地追加。

我有python脚本,可以结合一个文件中的所有文件,但只有当这些文件放在一个文件夹中。

你能帮忙提供一个能处理上述目录结构的脚本吗?

+0

既然你有脚本可以工作,如果只有一个文件夹,我认为你现在需要的只是获取树中的所有CSV文件,对吧? – zhangyangyu

+0

是的......我只需要把它们放在一个单独的文件夹中,但不同目录下的文件名称相同。所以我需要在将它们放入单个文件夹之前更改名称。而且我不想一个一个地手动更改名称。 – user2159674

回答

0

您不必将所有文件放在一个文件夹中。当你对这些文件做些什么的时候,你需要的只是文件的路径。因此收集所有csv文件的路径并执行组合。

import os 
    csvfiles = [] 
    def Test1(rootDir): 
     list_dirs = os.walk(rootDir) 
     for root, dirs, files in list_dirs:  
      for f in files: 
       if f.endswith('.csv'): 
        csvfiles.append(os.path.join(root, f)) 
+0

在我的目录结构中,我有很多子目录...所以它能够找到.csv文件?另外,每个.csv文件都具有相同类型的标题。所以当我追加它们时,我不想在第一个文件的末尾附加第二个csv文件的头文件。我需要的是1个标题。 – user2159674

+0

函数可以收集根目录下的所有csv文件,即使在子目录下也是如此。至于组合,你说你有一个剧本。我认为你可以使用该脚本,只需稍作修改。@ user2159674 – zhangyangyu

0

你可以使用os.listdir()来获得在目录

2

文件列表试试这个代码,我测试了我的笔记本电脑,它工作得很好!

import sys 
import os 

def mergeCSV(srcDir,destCSV): 
    with open(destCSV,'w') as destFile: 
     header='' 
     for root,dirs,files in os.walk(srcDir): 
      for f in files: 
       if f.endswith(".csv"): 
        with open(os.path.join(root,f),'r') as csvfile: 
         if header=='': 
          header=csvfile.readline() 
          destFile.write(header) 
         else: 
          csvfile.readline() 
         for line in csvfile: 
          destFile.write(line)   

if __name__ == '__main__': 
    mergeCSV('D:/csv','D:/csv/merged.csv') 
相关问题