我试图编写一个导入文件的脚本,然后对该文件执行某些操作并将结果输出到另一个文件中。
df = pd.read_csv('somefile2018.csv')
以上代码完美无缺。但是,我想避免在代码中硬编码文件名。
该脚本将在包含script.py
和几个csv文件的文件夹(目录)中运行。
我尝试过以下方法:
somefile_path = glob.glob('somefile*.csv')
df = pd.read_csv(somefile_path)
但是我收到以下错误:
ValueError: Invalid file path or buffer object type: <class 'list'>
答案 0 :(得分:5)
glob
返回一个列表,而不是字符串。 read_csv
函数将字符串作为查找文件的输入。试试这个:
for f in glob('somefile*.csv'):
df = pd.read_csv(f)
...
# the rest of your script
答案 1 :(得分:3)
您可以在脚本中获取CSV文件列表并循环显示它们。
from os import listdir
from os.path import isfile, join
mypath = os.getcwd()
csvfiles = [f for f in listdir(mypath) if isfile(join(mypath, f)) if '.csv' in f]
for f in csvfiles:
pd.read_csv(f)
# the rest of your script
答案 2 :(得分:1)
循环遍历每个文件并构建DataFrame列表,然后使用concat
将它们组合在一起。
答案 3 :(得分:0)
要读取遵循特定模式的所有文件,只要它们共享相同的架构,请使用以下功能:
import glob
import pandas as pd
def pd_read_pattern(pattern):
files = glob.glob(pattern)
df = pd.DataFrame()
for f in files:
df = df.append(pd.read_csv(f))
return df.reset_index(drop=True)
df = pd_read_pattern('somefile*.csv')
这将适用于绝对路径或相对路径。