我有一个包含5个.txt文件的文件夹:
100240042.txt
102042044.txt
016904962.txt
410940329.txt
430594264.txt
其中一个仅包含 种不同类型的水果(例如苹果,香蕉,橙子等)。但是,其他都包含“鸡肉”。这些必须删除,只留下水果清单。
到目前为止,我已经尝试了4种不同的解决方案
尝试0
import os
for filename in os.listdir(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits'):
f = open(filename)
for line in filename:
if 'chicken' in line:
found=true
os.remove(filename)
f.close()
尝试1
import os
for file in os.listdir(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits'):
open(file, 'r')
f.read()
find('chicken')
os.remove()
f.close()
尝试2
import os
for file in os.listdir(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits'):
open(file, 'r')
f.read()
find('chicken')
os.remove()
f.close()
尝试3
import os
for file in os.listdir(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits'):
if 'chicken' in open(file).read():
os.remove(file)
f.close()
我认为这是一个相对简单的问题,但我不断遇到以下错误:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '100240042.txt'
答案 0 :(得分:2)
我看到了其他问题,但让我来解决您的要求:
os.remove(filename)
这在当前目录中执行。通常是您运行程序的目录。但是,如果尝试在外壳程序上运行命令rm filename
,也会看到错误,因为该文件实际上位于另一个目录中。您想做的是这样:
open(os.path.join(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits', filename))
还有:
os.remove(os.path.join(r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits', filename))
因此您的代码应如下所示:
DIR = r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\Fruits'
for filename in os.listdir(DIR):
found = False
with open(os.path.join(DIR, filename)) as f:
for line in f:
if 'chicken' in line:
found = True
break
if found:
os.remove(os.path.join(DIR, filename))
答案 1 :(得分:0)
您必须构造文件的完整路径。如果看到错误消息,
FileNotFoundError: [Errno 2] No such file or directory: '100240042.txt'
它正在尝试打开相对于脚本路径的文件。简而言之,它会在与脚本相同的目录中查找该文件。
要获取绝对路径,请执行
os.path.abspath("myFile.txt")