我想做的是删除重复的文件。
文件示例:
2024-11-22 23-40-25 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-14-02 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-02-34 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-01-58 - Konstrukteur - Möbel (mwd).txt
我愿意:
def delete_all_duplicates(original_list_files,list_files):
for file in list_files:
if list_files.count(file) > 1:
for filex in original_list_files:
if file in filex:
try:
print('Trying to remove')
os.remove(filex)
print('file removed')
except:
pass
我不在乎日期。我只想删除这三个文件并保留一个。
我已经尝试了很多,但没有任何效果。我怀疑我需要使用正则表达式。
我只想删除这三个文件并保留一个。
我已经尝试了很多,但没有任何效果。我怀疑我需要使用正则表达式。
我怀疑我需要使用正则表达式。
你可以使用它们,但没有必要,请观察
2024-11-22 23-40-25 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-14-02 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-02-34 - Konstrukteur - Möbel (mwd).txt
2024-11-22 22-01-58 - Konstrukteur - Möbel (mwd).txt
日期时间部分是固定宽度的,所以对名称进行切片就足够了,例如你可以这样做
import os
files = ["2024-11-22 23-40-25 - Konstrukteur - Möbel (mwd).txt","2024-11-22 22-14-02 - Konstrukteur - Möbel (mwd).txt", "2024-11-22 22-02-34 - Konstrukteur - Möbel (mwd).txt", "2024-11-22 22-01-58 - Konstrukteur - Möbel (mwd).txt"]
seen = set()
for file in files:
name_without_dt = file[19:]
if name_without_dt in seen:
os.remove(file)
seen.add(name_without_dt)
警告:此解决方案假设所有文件名均以所示格式的日期时间开头。
您可以使用正则表达式来查找:
然后将其替换为任何内容,即删除它
import re
files = ["2024-11-22 23-40-25 - Konstrukteur - Möbel (mwd).txt",
"2024-11-22 22-14-02 - Konstrukteur - Möbel (mwd).txt",
"2024-11-22 22-02-34 - Konstrukteur - Möbel (mwd).txt",
"2024-11-22 22-01-58 - Konstrukteur - Möbel (mwd).txt"]
for f in files:
dateless = re.sub("[\d-]* [\d-]* - ", "", f)
print(dateless)
输出
Konstrukteur - Möbel (mwd).txt
Konstrukteur - Möbel (mwd).txt
Konstrukteur - Möbel (mwd).txt
Konstrukteur - Möbel (mwd).txt
请注意,这比简单地删除前 N 个字符稍微“脆弱”一点,并且将继续使用以下文件名:
2024-7-4 2-14-59 - Konstrukteur - Möbel (mwd).txt
,所以我认为列表只有文件名。
os.remove()方法需要删除文件的绝对路径,这就是第一个代码不起作用的原因。您应该更具体地了解要删除的文件以获得更好的答案:
def delete_all_duplicates(newpath, original_list_files, list_files):
files_to_remove = [file for file in list_files if (list_files.count(file) > 1) and (file in original_list_files)]
for file in files_to_remove:
try:
os.remove(os.path.join(newpath, file))
except OSError as error:
print(error)