我的目录中有11个文件以'case-export-'开头。对于这些文件中的每一个,我只想提取5个列(如“ initial_columns”变量中所示),将结果保存到名为“ whole_file”的数据框中,然后将“ whole_file”数据框写入CSV。因为我的目录中有11个与“ case-export-”匹配的文件,所以我的脚本应生成11个CSV。
当我运行下面的脚本时,我只生成了1个CSV,并且该CSV包含来自For循环读取的最新文件中的数据。
.row {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;
}
我知道如何解决此问题,方法是添加一个空的数据框,然后将每个“ whole_file”连接到数据框,使其通过循环。我尝试了一下,效果很好。但是,我试图理解为什么上面显示的原始脚本无法按预期运行,为什么它只生成1个CSV而不是11个CSV。
答案 0 :(得分:1)
我认为这是因为 now 是在您拥有的for循环之外定义的。因此,每次使用时,csv文件名中使用的时,分和秒都相同,因此每次都覆盖一个文件。
如果将 now 变量定义移至for循环内,则它应该可以工作:
for file in (glob.glob(directory + 'case-export-*')):
now = datetime.datetime.now()
date = dt.datetime.today().strftime("%m_%d_%Y")
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')
* 编辑:还将 date 定义移到了for循环中以获取准确的日期
我还要执行以下操作来生成文件名:
for file in (glob.glob(directory + 'case-export-*')):
csv_file_name = df.datetime.now().strftime("%m_%d_%Y_%H_%M_%S")
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_' + csv_file_name + '.csv')
答案 1 :(得分:0)
似乎您可能已经在循环外部声明了“ date”和“ now”变量,这意味着
'whole_file.to_csv(目录+'case_export_trimmed_'+日期+''+ str(现在。小时)+''+ str(现在。分钟)+'_'+ str(现在.second)+'.csv')'
对于11个迭代中的每个迭代,都将覆盖同一文件,因此您将在输出文件中仅看到第11个迭代详细信息
答案 2 :(得分:0)
通常,使用日期(小时/分钟/秒)的一种更好的解决方案是保留旧文件名,但可以使用修剪后的文件名作为前缀或后缀:
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)
trimmed_file = file.replace("case-export-", "case-export-trimmed-")
# or trimmed_file = file.replace(".csv", "-trimmed.csv")
whole_file.to_csv(trimmed_file)
这样,通过查看文件名,您会更清楚地了解/了解发生的事情/意图是...