我有一个包含数百个文件的文件夹。我有一个我知道需要删除的文件列表,所以我试图编写代码来弄清楚:此列表中的哪些文件在此文件夹中,哪些不在。
我正在使用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的新手,如果这很简单,请您道歉。
答案 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))