【问题标题】:How to open multiple files whose name has a special characters in it in python如何在python中打开多个名称中包含特殊字符的文件
【发布时间】:2020-08-28 19:29:54
【问题描述】:

我有一个列表,其中包含目录中存在的所有文件的名称。文件名中包含特殊字符。例如:-'MDH'_data_dump.csv、'PLD'_data_dump.csv 等(单引号)。我正在尝试通过一个列表运行一个循环,该列表将打开所有 csv 文件,将所有 csv 文件的数据附加到单个 dataframe 中。但我收到一个错误。我可以像这样一次打开一个文件

recon_dataframe=pd.read_csv('\'BAL\'_data_dump.csv')

这一切都很好。但是如何遍历所有文件的循环,我无法获得逻辑。请帮忙 。我试过的代码是:

recon_dataframe=pd.DataFrame()
  for i in range(0,len(csv_files)):
    recon_dataframe.append(pd.read_csv(csv_files[i][:5]+csv_files[i][5:])) 

csv_files 是包含所有列表名称的列表。 此外,所有文件的名称都采用相似的格式。引号后的字符串是常量,唯一变化的部分是引号内的字符串

【问题讨论】:

  • 为什么不转义循环中的引号?似乎是解决方案。
  • 您遇到什么错误?请提供完整的回溯。
  • 请注意这里是否是您的问题,但是数据帧上的append 方法与list 不同,您需要重新分配它:。所以在你的循环中应该是recon_dataframe = recon_dataframe.append(...。为了提高效率,请参阅此link 的底部并使用concat
  • 嗨,本,你做对了。一旦我重新分配,代码就起作用了。我以前不知道这个概念。感谢您的及时回复。我也以稍微不同的方式来解决这个我觉得非常强大的问题。我在下面发布答案。再次感谢您,注意安全:)

标签: python regex pandas numpy


【解决方案1】:

我这样做并得到了答案。

df1=pd.DataFrame()
for j in csv_files:
    p=j[1:4]
    df=pd.read_csv('\'{}\'_F47072_data_dump.csv'.format(p))
    df1=pd.concat([df,df1])

编辑:在这里使用concat 的正确方法是:

df1 = pd.concat([pd.read_csv('\'{}\'_F47072_data_dump.csv'.format(j[1:4]))
                 for j in csv_files])

虽然结果的顺序可能不同,但会更快

【讨论】:

  • 我在您的示例中添加了使用 concat 的正确方法,希望在 for 循环中的每次迭代中使用 concat(或追加)有意义(并且有效)如果您有大量迭代或数据很大
  • 另外,你应该接受你自己的答案来结束问题,如果有人在后面添加了更好的答案,你仍然可以在这个时候更改接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2018-05-09
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多