这似乎是一件容易做的事情,但我似乎总是做不好。
我有一个父目录“Sessions”,其中包含许多子文件夹“day*”->“weather”,其中包含类似的 csv 文件“weather*.csv”。我想循环遍历目录结构中的每个子文件夹以复制该特定的“weather*.csv”文件,以便在父目录中的目标位置创建一个主 csv 文件。
目录/文件/源路径为:
会话/day1/天气/weather1.csv,
会话/day2/天气/weather2.csv,
会话/day3/天气/weather3.csv,
Sessions/day4/weather/weather4.csv...等等直到 150。
目的地路径:
会话/weather_All.csv
weather_All.csv 是一个包含每天天气串联的组合文件。
我尝试过使用 os.walk、shutil、pandas concat,但我尝试的每一次尝试都无法正常工作。我在这里查看了多个问题和答案,并尝试将代码块拼凑在一起以获得我正在寻找的输出,但没有成功。
这样的事情怎么样?
这不会创建每个 csv 的重复项。我知道您说过您正在尝试复制它们,但似乎您实际上并不想要副本,您只是这样做作为获取最终文件的一个步骤。如果这是不正确的,我很抱歉。
在这段代码中,我们创建了一个空的 main_df,它只是我们想要的框架 - 当然,您需要将实际的列名称放入该代码中(可能通过查看单个 csv 之一手动进行,希望如此)有效)。
然后我们使用
pathlib.Path.rglob()
迭代会话文件夹并提取以 .csv 结尾的所有内容。我们将其读入数据帧,然后将其附加到 main 中。
浏览完所有文件后,我们将 main_df 保存为 csv。
from pathlib import Path
import pandas as pd
main_df = pd.DataFrame(columns=['the','columns','that','exist','in','each','csv'])
for file in Path('Sessions').rglob('*.csv')
df = pd.read_csv(file)
main_df = pd.concat([master_df,df])
master_df.to_csv(r'Sessions/weather_all.csv')