我目前正在编写python代码来访问每个目录并删除指定的文件扩展名的特定类型。但是,如果有两个具有相同名称但文件扩展名不同的文件,我只希望代码删除文件。
即。如果只在同一文件夹中同时存在mytext.txt和mytext.docx,我只希望mytext.txt删除;如果仅存在mytext.txt,则我希望代码跳过该特定文件夹。
无论情况如何,我都添加了以下几行以删除带有扩展名的文件:
for item in test:
if item.endswith('.txt'):
os.remove(os.path.join(pathforRemove, item))
答案 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)
您可以调整文件扩展名并进一步更改。