python检查文件夹内容是否存在

时间:2017-11-05 12:03:45

标签: python csv

此代码的目的是:

读取包含文件名列表

列的csv文件

这是csv文件:

https://drive.google.com/open?id=0B5bJvxM9TZkhVGI5dkdLVzAyNTA

然后检查特定文件夹以检查文件是否存在

如果发现文件不在列表中则将其删除

这是代码:

import pandas as pd
import os.path

data = pd.read_csv('data.csv')
names = data['title']
path = "C:\\Users\\Sayed\\Desktop\\Economic Data"

for file in os.listdir(path):
    os.path.exists(file)
    print(file)
    file = os.path.join(path, file)
    fileName = os.path.splitext(file)

    if fileName not in names:
        print('error')
        os.remove(file)

我修改了第一个代码,这是新代码,我没有错误但只是删除了目录中的所有文件

2 个答案:

答案 0 :(得分:2)

os.chdir不返回任何内容,因此将结果分配给path表示pathNone,这会导致错误。

由于您正在使用pandas,所以使用pd.Series.isin来加快速度,这是一个小技巧。

root = "C:\Users\Sayed\Desktop\Economic Data"
files = os.listdir(root)

for f in data.loc[~data['title'].isin(files), 'title'].tolist():
    try:
        os.remove(os.path.join(root, f))
    except OSError:
        pass

根据EAFP添加了try-except支票(因为我这里没有进行os.path.exists检查)。或者,您可以使用pd.Series.apply添加基于存在的过滤器:

m = ~data['title'].isin(files) & data['title'].apply(os.path.exists)

for f in data.loc[m, 'title'].tolist():
    os.remove(os.path.join(root, f))

答案 1 :(得分:1)

您的path是os.chdir()调用的返回值。这显然是None 您希望将path设置为表示路径的字符串...将chdir保留。