如果…怎么办Pandas.read\u csv在循环中遇到一个空文件?

2024-04-26 20:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份日期清单。你知道吗

dates = [20170203, 20170204 ...]

我通常做的是:

output = pd.concat([pd.read_csv('filename_{0}.csv'.format(x)) for x in dates])

但是,当文件不存在时,该行不起作用。你知道吗

所以我创建了一个包装函数:

output = pd.concat([reader('filename_{0}.csv'.format(x)) for x in dates])

def reader(x):
    if os.path.isfile(x):
        return pd.read_csv(x)
    else:
        ?????

问题来了:如果我不知道文件的头是什么,我应该把什么作为返回值?你知道吗


Tags: 文件csv函数informatforreadoutput
2条回答

您的函数被调用为每个可能的文件返回一些内容。既然您想跳过一些,请将迭代逻辑移到函数中,并用^{}名称将其转换为生成器:

def reader(files_iterator):
    for filename in files_iterator:
        if os.path.isfile(filename):
            yield pd.read_csv(x)

像这样使用:

output = pd.concat(list(reader('filename_{}.csv'.format(x) for x in dates)))
output = pd.concat([pd.read_csv('filename_{0}.csv'.format(x)) for x in dates if os.path.isfile('filename_{0}.csv'.format(x))])

跳过传递给pd.concat的无效文件。你知道吗

假设文件夹中存在以下文件:

file0.csv
file2.csv
file3.csv
file5.csv
file8.csv
file9.csv

dates = list(range(10))
results = ['file{0}.csv'.format(x) for x in dates if os.path.isfile('file{0}.csv'.format(x))]

# results:
#
# [file0.csv,
#  file2.csv,
#  file3.csv, 
#  file5.csv, 
#  file8.csv, 
#  file9.csv,]

相关问题 更多 >