如果目录中包含字符串[]的所有文件,则将其删除

时间:2019-04-10 13:44:00

标签: python

我有一个包含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'

2 个答案:

答案 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")