你好,我正在清理我的电脑,所以我发现自己向 Handbrake 提供了大量文件以进行压缩。压缩后,一些文件的大小比原始文件大。我想清理它,所以我尝试制作一个小的 python 脚本。
基本上我有 2 个文件名相同但大小不同的文件夹,我想比较文件以删除较大的文件,所以如果我合并文件夹,我将只保存较小的文件。
我以我拥有的文件夹为例
- test/Original
file1.mpg 40Mb
file2.mpg 2Mb
file3.mpg 400Mb
file4.mpg 45Mb
- test/Compressed
file1.mpg 20Mb
file2.mpg 2Mb
file3.mpg 200Mb
file4.mpg 105Mb
在脚本的末尾,我想要这个(或合并的第三个文件夹)
- test/Original
file4.mpg 45Mb
- test/Compressed
file1.mpg 20Mb
file2.mpg 2Mb
file3.mpg 200Mb
file4.mpg 105Mb
我写了这段代码,它似乎可以工作,但我想知道是否有更好的方法来做这件事,我听说过一个函数 filecompare 但我不明白我是否可以从中获取文件大小。
另外,我不明白为什么如果我删除注释行的注释,我会收到缩进错误。
import os
dirA = 'test/a'
dirB = 'test/b'
merged = []
with os.scandir(dirA) as it:
for entry in it:
if entry.is_file():
merged.append(entry)
with os.scandir(dirB) as it:
for entry in it:
if entry.is_file():
merged.append(entry)
for i in range(len(merged)):
# print('-------------iterating over %s' % (merged[i].name,merged[i].stat().st_size/1024**2))
for j in range(i + 1, len(merged)):
if str(merged[i].name) == str(merged[j].name):
print('----DUPLICATE %s %.2f Mb = %s %.2f Mb' % (merged[i].name, merged[i].stat().st_size/1024**2, merged[j].name, merged[j].stat().st_size/1024**2))
if merged[i].stat().st_size >= merged[j].stat().st_size:
print('removing %s %.2f Mb' % (merged[i].name, merged[i].stat().st_size/1024**2))
os.remove(merged[i])
elif merged[i].stat().st_size < merged[j].stat().st_size:
print('removing %s %.2f Mb' % (merged[j].name, merged[j].stat().st_size/1024**2))
os.remove(merged[j])