需要帮助从文件夹中删除特定的文件扩展名

时间:2019-01-30 01:56:38

标签: python file duplicates

我目前正在编写python代码来访问每个目录并删除指定的文件扩展名的特定类型。但是,如果有两个具有相同名称但文件扩展名不同的文件,我只希望代码删除文件。

即。如果只在同一文件夹中同时存在mytext.txt和mytext.docx,我只希望mytext.txt删除;如果仅存在mytext.txt,则我希望代码跳过该特定文件夹。

无论情况如何,我都添加了以下几行以删除带有扩展名的文件:

for item in test:
    if item.endswith('.txt'):
        os.remove(os.path.join(pathforRemove, item))

3 个答案:

答案 0 :(得分:0)

如果'f1.txt', 'f2.png', 'f2.txt', 'f3.png', 'f4.txt' 是您的文件:

from collections import defaultdict
test = ['f1.txt', 'f2.png', 'f2.txt', 'f3.png', 'f4.txt']

# construct a filename to extensions map
fname_to_ext = defaultdict(set)
pairs = list(map(lambda s: (s[:s.rfind('.')], s[s.rfind('.'):]), test))
for fname, ext in pairs:
    fname_to_ext[fname].add(ext)

for fname, exts in fname_to_ext.items():
    if len(exts) > 1 and '.txt' in exts:
        print('deleting: ', fname + '.txt')
        # os.remove(os.path.join(pathforRemove, item))  

此打印:

deleting:  f2.txt

答案 1 :(得分:0)

您可以通过将答案存储在from django.test import override_settings TEST_CACHE_SETTING = { # ... } class SomeUnitTests(unittest.RollbackTestCase): @override_setting(CACHES=TEST_CACHE_SETTING) def test_some(self): # Some test here against TEST_CACHE_SETTING def test_some_1(self): # Another test with the normal cache setup. 中并将每个值都设为dict的方式来稍微修改答案以检查是否存在这种情况。然后,我们从字典中收集所有长度大于2的值,并以list结尾的文件。一旦拥有所有这些值,便将其删除。

'.txt'

答案 2 :(得分:0)

您可以尝试使用以下代码片段查看是否满足您的要求:

import os
rootDir = '/test-dir-traverse'
extensionToBeRetained = 'docx'
extensionToBeRemoved = 'txt'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fnameToBeRemoved in fileList:
        print('\t%s' % fnameToBeRemoved)
        for fname in fileList:
            if fnameToBeRemoved.endswith(extensionToBeRemoved) and fname.endswith(extensionToBeRetained) and fnameToBeRemoved[0:-len(extensionToBeRemoved)] == fname[0:-len(extensionToBeRetained)]:
                print('Deleting file : {}').format(fnameToBeRemoved)

您可以调整文件扩展名并进一步更改。