从块名称部分删除文件全名的文件

问题描述 投票:0回答:3

我想做的是删除重复的文件。

文件示例:

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

我不在乎日期。我只想删除这三个文件并保留一个。

我已经尝试了很多,但没有任何效果。我怀疑我需要使用正则表达式。

我只想删除这三个文件并保留一个。

我已经尝试了很多,但没有任何效果。我怀疑我需要使用正则表达式。

python duplicates
3个回答
1
投票

我怀疑我需要使用正则表达式。

你可以使用它们,但没有必要,请观察

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)

警告:此解决方案假设所有文件名均以所示格式的日期时间开头。


1
投票

您可以使用正则表达式来查找:

  • 一堆数字和/或破折号,后跟
  • 一个空格,然后是
  • 一堆数字和/或破折号,后跟
  • 被空格包围的破折号

然后将其替换为任何内容,即删除它

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



-1
投票
newpath

,所以我认为列表只有文件名。 os.remove()方法需要删除文件的绝对路径,这就是第一个代码不起作用的原因。您应该更具体地了解要删除的文件以获得更好的答案:

如果日期和文件名其余部分之间的数字对于选择要删除的文件很重要
  • 如果要删除的所有文件都有“Konstrukteur - Möbel (mwd)”
  • original_list_files
  • 列表中有哪些文件
  • 如果第二个代码有效,那么这是一种更优雅的方法:
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)
	
© www.soinside.com 2019 - 2024. All rights reserved.