3

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

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

    -主目录

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

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

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

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

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

4

3 回答 3

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')
于 2013-07-11T08:25:01.397 回答
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))
于 2013-07-11T07:18:46.797 回答
0

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

于 2013-07-11T07:51:12.850 回答