使用Python OS模块:找出文件列表中的哪些文件已在特定文件夹中

时间:2019-02-15 21:06:12

标签: python

我有一个包含数百个文件的文件夹。我有一个我知道需要删除的文件列表,所以我试图编写代码来弄清楚:此列表中的哪些文件在此文件夹中,哪些不在。

我正在使用os模块,我知道如何使用os.walk浏览文件夹中的所有文件,但是我不知道如何指定文件是否在{{ 1}}。

所以我想检查files_list中的文件名是否在“文件夹”中,如果是,则将其附加到files_list,如果不是,则将其附加到{ {1}}。这是我到目前为止的内容:

bad_list

我的问题是,我该如何放入“在good_list中”部分?我认为它应该放在for root, dirs, files in os.walk(my_path): for file in files: if file in folder: badlist.append(file) else: good_list.append(file) 部分之后,说类似“在files_list中”这样的内容,但是我不知道到底该如何在代码中编写。

我是Python的新手,如果这很简单,请您道歉。

2 个答案:

答案 0 :(得分:1)

为什么不尝试删除文件夹中的已知文件并忽略任何错误

import os

files_to_remove = ['a.txt', 'b.txt']
folder_name = '/the_files_folder'
for file_to_remove in files_to_remove:
    try:
        os.remove(os.path.join(folder_name, file_to_remove))
    except OSError:
       pass

答案 1 :(得分:1)

使用set进行成员资格测试。

假设folder是带有扩展名的文件名列表(例如'foo.txt'),请将folder设置为一个集合,然后使用set方法来区分文件。如果要将完整路径存储在好名单和坏名单中,请使用os.path.join

folder = set(folder)
for root, dirs, files in os.walk(my_path):
    files = set(files)
    #badlist.extend(files.intersection(folder))
    for fname in files.intersection(folder):
        badlist.append(os.path.join(root, fname))
    #goodlist.extend(files.difference(folder))
    for fname in files.difference(folder):
        goodlist.append(os.path.join(root, fname))