我的要求是,如果我在文件名中找到特定模式,那么我需要删除属于该组的相应文件组。例如,下面是我拥有的文件组:
file1.infile_inprogress_2015033
file1.infile_rsn_20150330022431
file1.infile_err_20150330022431
file2.infile_03_29_2015_05:08:46
file2.infile_03_29_2015_05:09:56
file3.infile_20150330023214
我需要在文件名中搜索的模式是:"inprogress"
。因此,在上面的列表中,我将需要删除以下文件:
file1.infile_inprogress_2015033
file1.infile_rsn_20150330022431
file1.infile_err_20150330022431
因为上面的列表在标识符"file1"
之前具有相同的文件名("infile"
)。
截至目前,我只能列出文件:
filelist = (glob.glob('C:\\CIRP\\Velocidata\\Test\\*'))
for file in filelist:
filenamecopied = os.path.basename(file)
if fnmatch.fnmatch(filenamecopied,"*Inprogress*"):
print ('Delete the group of files ')
else:
print ('skip this file')
答案 0 :(得分:3)
OS walk是一个更好的选择(更容易阅读),然后过滤文件名。
import os
top = 'C:\\CIRP\\Velocidata\\Test\\'
# Getting the list of all files
for root, dirs, files in os.walk(top):
# Filtering for group names that are 'Inprogress'
groups_in_progress = []
for name in files:
if 'Inprogress' in name:
group = name[0:name.lower().find('infile')]
groups_in_progress.append(group.lower())
# Delete the files where a group is in progress
for name in files:
for group in groups_in_progress:
if name.lower().startswith(group):
os.remove(os.path.join(root, name))
您可以使用词典和各种优化,但这是最直接的。
答案 1 :(得分:2)
您需要os.unlink
。从文档中,os.unlink
用于
删除(删除)文件路径。
在if
子句中添加几行
# This if will check for "InProgress"
if fnmatch.fnmatch(filenamecopied,"*Inprogress*"):
filegroup = filenamecopied.split('.')[0] # get the file group
for i in filelist: # Iterate through the files
# This if will check for "file1" or "file2" etc
if (i.startswith(filegroup)): # if i is of same group
os.unlink(i) # Delete it
答案 2 :(得分:1)
几个问题:
如果我认为文件名格式是一堆字母或数字,那么"。"然后是一堆更多的角色,并且它们以随机顺序出现我会这样做:
有点像这样:
filelist = (glob.glob('C:\\CIRP\\Velocidata\\Test\\*'))
deleteList = set()
for f in filelist:
if "inprogress" in f.lower(): #Checks if inprogress is in the filename
deleteList.add(f[:f.find(".")]) #Adds base of filename
print deleteList
for f in filelist:
if f[:f.find(".")] in deleteList:
print "Delete:",f
else:
print "Do not delete:",f
我还没有完成实际的删除代码,但您可以检查这是否正在为您捕获所有内容。我使用简单的字符串函数,而不是根据你所说的来捕获文件名。如果没有,请回复上述问题的答案!