删除 python 中具有相似名称的较小的 mp3 文件
delete smaller mp3 files with similar name in python
我一直面临以下问题:
有个目录,在线电台翻录存放mp3文件
有些播放存储次数多了,区别就在名字上:
第一个文件直到点具有唯一名称:something.mp3
点之前的第二个文件有方括号:something(1).mp3
点之前的第三个文件有方括号:something(2).mp3 等等....
我想删除较小的文件,只留下其中一个。
因此开始执行以下脚本:
#!/usr/bin/python3
import os
import datetime
import sys
import glob
from collections import Counter
path = "/path_of_mp3_files/"
dirs = os.listdir( path )
list_of_files = []
mp3files = []
mp3_with_bracket = []
mp3_without_bracket = []
pending_files = []
for file in dirs:
if ")" not in file:
mp3_without_bracket.append(file)
else:
mp3_with_bracket.append(file)
print(mp3_with_bracket)
print("-------------------------------------------------------------------------------------------------------------")
print(mp3_without_bracket)
mp3_without_bracket.sort()
mp3_with_bracket.sort()
背后的逻辑是制作 2 个列表,有括号和没有括号。
但是现在呢?
你能给我一些如何完成它的建议吗?不管怎样,逻辑够好吗?
你可以这样做:
import os
import datetime
import re
import sys
import glob
from collections import Counter
path = "mp3_files"
dirs = os.listdir( path )
to_remove=[]
for i in range(len(dirs)):
for j in range (i+1,len(dirs)):
# get names without (n)
namei=re.sub('\(\d+\)','',dirs[i])
namej=re.sub('\(\d+\)',"",dirs[j])
# get sizes
sizei=os.path.getsize(os.path.join(path, dirs[i]))
sizej=os.path.getsize(os.path.join(path, dirs[j]))
# if same name check size
if namei==namej and sizei<sizej:
to_remove.append(dirs[i])
elif namei==namej and sizei>=sizej:
to_remove.append(dirs[j])
for file in set(to_remove):
# os.remove(os.path.join(path, file))
print(os.path.join(path, file)
这将遍历文件列表并将它们与其余文件进行检查,如果不带括号的名称相同,则将较小的添加到要删除的文件列表中。最后删除文件。
** 请注意,我注释掉了实际的删除并添加了打印,因此您可以先 运行 它并确保它会删除您想要的内容。
删除前请做好备份!! :)
我一直面临以下问题:
有个目录,在线电台翻录存放mp3文件
有些播放存储次数多了,区别就在名字上: 第一个文件直到点具有唯一名称:something.mp3 点之前的第二个文件有方括号:something(1).mp3 点之前的第三个文件有方括号:something(2).mp3 等等.... 我想删除较小的文件,只留下其中一个。 因此开始执行以下脚本:
#!/usr/bin/python3
import os import datetime import sys import glob from collections import Counter path = "/path_of_mp3_files/" dirs = os.listdir( path ) list_of_files = [] mp3files = [] mp3_with_bracket = [] mp3_without_bracket = [] pending_files = [] for file in dirs: if ")" not in file: mp3_without_bracket.append(file) else: mp3_with_bracket.append(file) print(mp3_with_bracket) print("-------------------------------------------------------------------------------------------------------------") print(mp3_without_bracket) mp3_without_bracket.sort() mp3_with_bracket.sort()
背后的逻辑是制作 2 个列表,有括号和没有括号。 但是现在呢? 你能给我一些如何完成它的建议吗?不管怎样,逻辑够好吗?
你可以这样做:
import os
import datetime
import re
import sys
import glob
from collections import Counter
path = "mp3_files"
dirs = os.listdir( path )
to_remove=[]
for i in range(len(dirs)):
for j in range (i+1,len(dirs)):
# get names without (n)
namei=re.sub('\(\d+\)','',dirs[i])
namej=re.sub('\(\d+\)',"",dirs[j])
# get sizes
sizei=os.path.getsize(os.path.join(path, dirs[i]))
sizej=os.path.getsize(os.path.join(path, dirs[j]))
# if same name check size
if namei==namej and sizei<sizej:
to_remove.append(dirs[i])
elif namei==namej and sizei>=sizej:
to_remove.append(dirs[j])
for file in set(to_remove):
# os.remove(os.path.join(path, file))
print(os.path.join(path, file)
这将遍历文件列表并将它们与其余文件进行检查,如果不带括号的名称相同,则将较小的添加到要删除的文件列表中。最后删除文件。
** 请注意,我注释掉了实际的删除并添加了打印,因此您可以先 运行 它并确保它会删除您想要的内容。 删除前请做好备份!! :)