【问题标题】:Python - Combing data from different .csv files. into onePython - 组合来自不同 .csv 文件的数据。合而为一
【发布时间】:2013-07-09 07:45:30
【问题描述】:

我需要 python 程序员的帮助来解决我在处理数据时面临的问题:-

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

    -主目录

    • 子目录 1
      • 子目录 1A
        • fil.csv
    • 子目录2
      • 子目录 2A
        • 文件.csv
    • 子目录3
      • 子目录 3A
        • 文件.csv

    我不想进入每个目录并访问 .csv 文件,而是想运行一个可以组合所有子目录的数据的脚本。

每个文件都有相同类型的标题。而且我需要维护一个只有一个标题的 .csv 大文件,并且所有 .csv 文件数据都可以一个接一个地附加。

我有一个 python 脚本,它可以将所有文件合并到一个文件中,但前提是这些文件放在一个文件夹中。

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

【问题讨论】:

  • 既然你有脚本可以在只有一个文件夹的情况下工作,我想你现在需要的只是获取树中的所有 csv 文件,对吧?
  • 是的.....我只需要将它们放在一个文件夹中,但不同目录下的文件具有相同的名称。所以我需要先更改名称,然后再将它们放在一个文件夹中。而且我不想一个一个手动更改名称。

标签: python csv python-2.7


【解决方案1】:

您不必将所有文件放在一个文件夹中。当你对文件做一些事情时,你所需要的只是文件的路径。因此收集所有 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))

【讨论】:

  • 在我的目录结构中,我有很多子目录......所以它能够找到 .csv 文件吗?此外,每个 .csv 文件都有相同类型的标题。所以当我附加它们时,我不想在第一个文件的末尾附加第二个 csv 文件的标题。我只需要 1 个标题。
  • 的功能可以收集根目录下的所有csv文件,甚至在子目录中。至于组合,你说你有一个脚本。我认为您可以使用该脚本并进行一些小修改。@user2159674
【解决方案2】:

您可以使用 os.listdir() 获取目录中的文件列表

【讨论】:

    【解决方案3】:

    试试这段代码,我在笔记本电脑上测试过,效果很好!

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2017-08-05
      相关资源
      最近更新 更多