Windows操作系统 - 我有几百个子目录,每个子目录包含一个或多个.csv文件。所有文件的结构都相同。我正在尝试遍历每个文件夹并将每个子目录中的所有文件连接到一个新文件中,该文件组合了该子目录中的所有.csv文件。
示例:
folder1 - > file1.csv,file2.csv,file3.csv - >> file1.csv,file2.csv,file3.csv,combined.csv
folder2 - > file1.csv,file2.csv - >> file1.csv,file2.csv,combined.csv
非常新的编码和迷失。尝试使用os.walk但完全失败。
答案 0 :(得分:0)
os.walk
生成的生成器每次迭代产生三个项目:walk中当前目录的路径,表示下一个将遍历的子目录的路径列表,以及当前包含的文件名列表。目录
如果由于某种原因你不想走某些文件路径,你应该删除下面我称之为sub
的条目(root
中包含的子目录列表)。这样可以防止os.walk
遍历您删除的所有路径。
我的代码不会修剪行走。如果您不想遍历整个文件子树,请务必更新。
以下大纲应该适用于此,尽管我无法在Windows上进行测试。我没有理由认为它的行为会有所不同。
import os
import sys
def write_files(sources, combined):
# Want the first header
with open(sources[0], 'r') as first:
combined.write(first.read())
for i in range(1, len(sources)):
with open(sources[i], 'r') as s:
# Ignore the rest of the headers
next(s, None)
for line in s:
combined.write(line)
def concatenate_csvs(root_path):
for root, sub, files in os.walk(root_path):
filenames = [os.path.join(root, filename) for filename in files
if filename.endswith('.csv')]
combined_path = os.path.join(root, 'combined.csv')
with open(combined_path, 'w+') as combined:
write_files(filenames, combined)
if __name__ == '__main__':
path = sys.argv[1]
concatenate_csvs(path)