我有一个包含多个子目录和子子目录的目录。我的目标是读取所有csv文件,并将它们附加到每个子目录一个大的csv文件中(PS不是每个子子目录一个大的csv文件,而是每个子目录一个文件)。
以下是我一直用于将所有csv文件附加到1个大csv文件中的代码,但是此代码的唯一问题是最终的csv文件大约为890 MB,这在您尝试打开该文件时无法读取Microsoft Excel中的文件,因为它遇到“内存问题”。
dirName = 'FTP_Data/2019/'
allFilesList = list()
print('[info.] looking for .csv files.')
for (dirpath, dirnames, filenames) in os.walk(dirName):
for file in filenames:
if file.endswith('.csv'):
allFilesList += [os.path.join(dirpath, file).replace('\\','/')]
print('[info.] combining all the .csv files.')
combined_csv = pd.concat([pd.read_csv(file, sort=True) for file in allFilesList])
print('[info.] exporitng to one final output file.')
combined_csv.to_csv('FinalOutputFrom2019.csv', index=False, encoding='utf-8')
上面的代码生成了一个大的csv文件,名为“ FinalOutputFrom2019.csv”。
现在,如果该目录下面的方式构成,我想它每月产生12个文件- ,2019-01.csv
,2019-02.csv
,2019-03.csv
,2019-04.csv
,2019-05.csv
,2019-06.csv
,2019-07.csv
,2019-08.csv
,2019-09.csv
,,2019-10.csv
2019-11.csv
2019-12.csv
FTP_data
|-- 2019
|-- 2019-01
|-- 2019-01-01
|-- foo.csv
|-- bar.csv
|-- foobar.xml
|-- 2019-01-03
|-- foobar.csv
|-- ...
|-- 2019-02
|-- 2019-02-02
|-- ...
|-- 2019-02-03
|-- ...
|-- 2019-02-05
|-- ...
|-- ...
只需将您的工作片段适应整个月的循环。尝试这个:
设定
yr = 2019
dirName = f'FTP_Data/{yr}/'
def export_csv(dirName, csv_name):
allFilesList = list()
print('[info.] looking for .csv files.')
for dirpath, dirnames, filenames in os.walk(dirName):
for file in filenames:
if file.endswith('.csv'):
allFilesList.append(os.path.join(dirpath, file).replace('\\', '/'))
print('[info.] combining all the .csv files.')
combined_csv = pd.concat([pd.read_csv(file, sort=True) for file in allFilesList])
print('[info.] exporting to one final output file.')
combined_csv.to_csv(f'{csv_name}.csv', index=False, encoding='utf-8')
执行
for mon in range(1, 13):
# yr = dirName.split("/")[1]
csv_name = f"{yr}-{mon:02}"
subdirName = f"{dirName}{csv_name}"
export_csv(subdirName, csv_name)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句