【发布时间】:2019-01-31 05:18:39
【问题描述】:
我的目录中有 11 个以“case-export-”开头的文件。对于这些文件中的每一个,我只想提取“initial_columns”变量中指示的 5 列,将结果保存到名为“whole_file”的数据帧中,并将“whole_file”数据帧写入 CSV。因为我的目录中有 11 个与“case-export-”匹配的文件,所以我的脚本应该有 11 个 CSV。
当我运行下面的脚本时,我只生成了 1 个 CSV,并且该 CSV 包含 For 循环读取的最新文件中的数据。
date = dt.datetime.today().strftime("%m_%d_%Y")
directory = '/Users/myname/Downloads/'
initial_columns = ['Case #','Case Subject','Created At','Labels','Body']
for file in (glob.glob(directory + 'case-export-*')):
whole_file=pd.read_csv(file, usecols = initial_columns, encoding='ISO-8859-1', index_col=None, low_memory=False).replace(np.nan, 'blank', regex=True)
whole_file.to_csv(directory + 'case_export_trimmed_' + date + '_' + str(now.hour) + '_' + str(now.minute) + '_' + str(now.second) + '.csv')
我知道如何通过添加一个空数据帧然后在每个“whole_file”通过循环时将它连接到数据帧来解决这个问题。我试过了,效果很好。但是,我试图理解为什么我上面显示的原始脚本没有按预期工作,以及为什么它只生成 1 个 CSV 而不是 11 个。请告知。
【问题讨论】:
-
我认为这是因为文件命名中使用了时间和日期。每个文件名将与在
1 sec内运行的循环完成时相同,而不是使用whole_file.to_csv(directory + 'case_export_trimmed_' + str(i)+ '.csv'),在 for 循环中每次递增i。 -
另一种方法是在每次迭代之间休眠一秒钟:D
标签: python pandas for-loop export-to-csv