【问题标题】:Python Fetching Name Of All CSV Files From Path And Writing Each To Different FolderPython从路径中获取所有CSV文件的名称并将每个文件写入不同的文件夹
【发布时间】:2018-06-12 17:58:16
【问题描述】:

我正在尝试打开文件夹中的所有文件,将它们存储在数据框中,并将每个 csv 文件附加到另一个名为 Append.csv 的 csv 文件中,并尝试用它们的名称写入所有文件到另一个文件夹。

例如,我有 5 个 csv 文件保存在一个名为 CSV FILES FOLDER 的文件夹中。这些文件是F1.csvF2.csvF3.csvF4.csv F5.csv。我要做的是使用 pandas 打开每个文件,然后在 for 循环 Append.csv 中执行此操作,然后将其存储在另一个名为 NEW CSV FILES FOLDER 的文件夹中> 作为:

F1_APPENDED.csv 
F2_APPENDED.csv
F3_APPENDED.csv
F4_APPENDED.csv

换句话说,_APPENDED 被添加到每个文件中,然后保存具有新名称的具有 _APPENDED 的文件。

我已经定义了这个文件夹的路径,但是无法保存。代码如下:

import pandas as pd
import glob
import os.path
import pathlib

path =r'C:\Users\Ahmed Ismail Khalid\Desktop\CSV FILES FOLDER'

allFiles = glob.glob(path + "/*.csv")

path1 = r'C:\Users\Ahmed Ismail Khalid\Desktop\Different Folder\Bitcoin Prices Hourly Based.csv'

outpath = r'C:\Users\Ahmed Ismail Khalid\Desktop\NEW CSV FILES FOLDER'



for f in allFiles:
    file = open(f, 'r')
df1 = pd.read_csv(path1)
df2 = pd.read_csv(f)
output = pd.merge(df1, df2, how="inner", on="created_at")
df3 = output.created_at.value_counts().rename_axis('created_at').reset_index(name='count')
df3 = df3.sort_values(by=['created_at'])
#print(df3,'\n\n')
df3.to_csv(outpath+f, encoding='utf-8',index=False)
#print(f,'\n\n')

我该怎么做?我试图查找官方文档但无法理解任何内容

我们将不胜感激任何和所有的帮助

谢谢

【问题讨论】:

  • 什么失败了?您说无法保存但未能提供完整的错误输出。
  • 我收到错误:无效参数:'C:\\Users\\Ahmed Ismail Khalid\\Desktop\\Different FolderC:\\Users\\Ahmed Ismail Khalid\\Desktop\ \不同文件夹\\adam3us_tweets.csv
  • 这条路径似乎非常错误,这可能是您的问题的原因。阅读它 - 它包含两次文件夹名称!
  • 当你从allFiles中获取f时,它包含路径,你应该使用path, filename = os.path.split(path/to/file/foobar.txt)来获取没有路径的文件名

标签: python pandas csv


【解决方案1】:

在这里,我在 for 循环中添加了一行,您可以在其中仅获取文件名。您可以在写入文件并指示输出 .csv 文件名时使用它而不是文件的完整路径。

import pandas as pd
import glob
import os.path
import pathlib

path =r'C:\Users\Ahmed Ismail Khalid\Desktop\CSV FILES FOLDER'

allFiles = glob.glob(path + "/*.csv")

path1 = r'C:/Users/Ahmed Ismail Khalid/Desktop/Different Folder/Bitcoin Prices Hourly Based.csv'

# You need to have a slash at the end so it knows it's a folder
outpath = r'C:/Users/Ahmed Ismail Khalid/Desktop/NEW CSV FILES FOLDER/'



for f in allFiles:
    file = open(f, 'r')
    _, fname = os.path.split(f)
    fname, ext = os.path.splittext(fname)

    df1 = pd.read_csv(path1)
    df2 = pd.read_csv(f)
    output = pd.merge(df1, df2, how="inner", on="created_at")
    df3 = output.created_at.value_counts().rename_axis('created_at').reset_index(name='count')
    df3 = df3.sort_values(by=['created_at'])
    #print(df3,'\n\n')
    df3.to_csv(outpath+fname+'_appended.csv', encoding='utf-8',index=False)
    #print(f,'\n\n')

【讨论】:

  • 即使我创建了新的 CSV 文件文件夹,它现在也没有将其写入输出文件夹,而是写入桌面。我还想使用以下约定保存文件:F1_APPENDED.csvF2_APPENDED.csv
  • 您的输出路径文件名后需要一个反斜杠,否则它不会被识别为新文件夹...我更新了我的答案以解决您的问题。
  • 现在它给出了语法错误:SyntaxError: EOL while scanning string literal
  • 在写错误时需要提供更多信息,即回溯是什么,错误在哪里。如果是反斜杠,你能像更新的例子那样切换到正斜杠吗?
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 2011-04-13
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2016-12-29
相关资源
最近更新 更多