【问题标题】:Avoid overwriting of files with "for" loop避免使用“for”循环覆盖文件
【发布时间】:2019-09-05 10:55:57
【问题描述】:

我有一个从用户选择的多个 csv 文件创建的数据帧列表 (df_cleaned)。

我的目标是将 df_cleaned 列表中的每个数据帧保存为本地单独的 csv 文件。

我完成了以下代码,它使用原始标题保存文件。但我看到它覆盖并设法保存 only 最后一个数据帧的副本。

我该如何解决?根据我非常基本的知识,也许我可以在循环中使用 break-continue 语句?但我不知道如何正确实现。

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\Data Docs\TrainData\{}.csv'.format(name))
print('Saving of files as csv is complete.')

【问题讨论】:

  • 变量name在哪里修改?在我看来,它会覆盖,因为您在循环中写入同一个文件(即将数据保存到同一个文件名中)。
  • @Ary 这可能是问题所在。你知道我该如何解决这个问题吗?我确实有一个文件名列表作为代码的单独部分,如果有帮助吗?

标签: python-3.x pandas csv dataframe


【解决方案1】:

您可以为每个文件创建不同的名称,例如下面我将索引附加到name

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\Data Docs\TrainData\{0}_{1}.csv'.format(name,i))
print('Saving of files as csv is complete.')

这将创建一个名为 <name>_N.csv 的文件列表,其中 N = 0, ..., len(df_cleaned)-1。

【讨论】:

  • 给我FileNotFoundError: [Errno 2] No such file or directory: 'C:\\...\\Data Docs\\TrainData\\fileLast.xlsm_0.csv' 其中fileLast 是列表中最后一个文件的名称。我确实有一个文件名列表作为代码的单独部分,如果有帮助吗?
  • 我对类似windows的信号不是很熟悉,但是文件名中的“...”看起来很可疑。至于文件名,您可以轻松使用它们,例如name = nameList[i] 在同一个循环中,假设文件名列表是nameList
  • 第一次尝试你的代码给了我上面的错误。不过我自己也找到了解决办法,很快就会贴出来。非常感谢您的努力:)
【解决方案2】:

一个非常简单的解决方法。只是自己想出了答案。发帖帮助别人。

fileNames 是我在代码开头创建的一个列表,用于保存 用户选择的文件的名称。

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\TrainData\{}.csv'.format(fileNames[i]))
print('Saving of files as csv is complete.')

为定义目录中的每个文件保存一个单独的副本。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多