此代码的目的是:
读取包含文件名列表
列的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)
我修改了第一个代码,这是新代码,我没有错误但只是删除了目录中的所有文件
答案 0 :(得分:2)
os.chdir
不返回任何内容,因此将结果分配给path
表示path
有None
,这会导致错误。
由于您正在使用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保留。