我的要求是,如果我在文件名中找到一个特定的模式,那么我需要删除属于该组的相应文件组。 例如,以下是我拥有的文件组:

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

因为上面的列表在标识符"infile"之前具有相同的文件名( "file1" )。

到目前为止,我只能列出文件:

 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')

#1楼 票数: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))

您可以使用字典和各种优化方法,但这是最直接的方法。

#2楼 票数: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

#3楼 票数:1

几个问题:

  1. 它们是否总是按照您列出它们的顺序排列?或者它们会以不同顺序弹出?
  2. 它们是否具有任何常规的格式功能(例如,前面的filexxx。)?
  3. 是否“进行中”部分总是先于其他文件出现?

如果我假设文件名格式是一堆字母或数字,则为“。”。 然后再添加一堆字符,并且它们以随机顺序出现,我将执行以下操作:

  1. 完成创建将要删除的文件前缀的列表。
  2. 再次浏览,删除前缀中的文件。

有点像这样:

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

我还没有完成实际的删除代码,但是您可以检查是否正在为您捕获所有内容。 我使用了简单的字符串函数,而不是根据您的说法重新捕获文件名。 如果没有,请发回上述问题的答案!

  ask by Ishu Gupta translate from so

未解决问题?本站智能推荐:

4回复

python模式匹配和处理

我试图用一堆线来解析日志。 我试图从实时跟踪中解析的行(文件尾部的那一行)是以“ Contact”开头的那一行。 实际上,我需要使用方括号之间的所有内容作为[2a00:c30:7141:230:1066:4f46:7243:a6d2]中的数字,并用方括号(56791)后的双点分隔数字作为变量
1回复

使用正则表达式python和re.compile识别.c文件或文本文件中的特定模式

我有一个如下所示的数据文件,我需要以V_AD_bs_NOut_Errs = V_AD_bs_NOut_Errs和C_SD_bs_NOxOut_Mask的形式提取所有数据; 。 但我的正则表达式是: ^[a-zA-Z]*_bs_[a-zA-Z0-9] [=] [a-zA-Z]_bs_[a-zA
1回复

Python:用于标识与模式匹配的所有子文件夹的函数

我编写了以下代码来查找匹配特定模式的所有子文件夹。 但是我没有办法检查这个函数是否真的找到了所有匹配项。 我想检索名称格式为“19xx @ 60xx_npo”的所有文件夹,其中xx是字符,可能是大写。 以上功能是否保证我将获得与“19xx @ 60xx_npo”匹配的所有文件夹
4回复

在python中按字符串模式对项目进行分组

接受此列表: 如果子字符串直到(XXXX)相同,我想将它的每个项目添加到一个组中(在这种情况下为列表中的列表)。 因此,在这种情况下,我期望有: 以下代码是我能够制作的,但无法正常工作: 我已经阅读了堆栈中的另一个主题,正则表达式页面http://www.divei
2回复

Python正则表达式字符模式组

我试图做一个正则表达式模式来匹配字符串中所有A ..组,直到下一个A。(Python) 例如:DFDAXDJSDSJDAFGCJASDJASAGXCJAD到: 我想到的最接近的是: 返回AF, AS, ASA, AD 为什么跳过第一个? 为什么它不返回所有字符直到下
4回复

基于Python中的模式拆分字符串

我有很长的字符串,如 "123 - Footwear, 5678 - Apparel, Accessories & Luxury Goods, 9876 - Leisure Products" 和 "321 - Apparel & Accessories, 432
1回复

构造正则表达式模式以仅识别python中的单独单词

我有长期e_learning ,我想看看有哪些方面,包括e_learning在mylist 我应该只将e_learning_environment和student_e_learning_platform作为输出。 我当前的代码如下。 但是,当我在python中使用in ,我
1回复

Python regex 捕获具有相似模式的组

我有一个包含推文的数据集,但格式如下: 现在,如果您看到数据不是理想的形式,其中主题标签和推特 ID 的格式正确。 现在,出于情感分析的目的,我需要从数据中删除这些主题标签和 ID。 现在,这是我正在使用的正则表达式: 现在,这不是完美的,但它解决了大部分问题。 它匹配@ xxx_yyy