【问题标题】:How to exclude some files by name using glob.glob("")? [duplicate]如何使用 glob.glob("") 按名称排除某些文件? [复制]
【发布时间】:2020-03-28 02:03:02
【问题描述】:

我正在使用 python glob.glob("*.json")。该脚本返回一个 json 文件,但在应用一些操作后,它会创建一个新的 json 文件。如果我再次运行相同的脚本,它会在列表中添加这个新文件...

glob.glob("*.json")

输出:

['men_pro_desc_zalora.json',
 'man_pro_desc_Zalando.json',
 'man_pro_desc_nordstrom.json']

代码结束:

with open("merged_file.json", "w") as outfile:
      json.dump(result, outfile)

运行添加文件merged_file.json后 如果我再次运行 glob.glob("*.json") 它会返回:

['men_pro_desc_zalora.json',
 'man_pro_desc_Zalando.json',
 'man_pro_desc_nordstrom.json',
merged_file.json]

【问题讨论】:

  • 使您的 glob 表达式的包容性降低。
  • stackoverflow.com/questions/20638040/glob-exclude-pattern/… 上查看答案。您可以使用 glob 进行某种程度的排除,但自己进行一些手动过滤(请参阅链接中的第二个答案)更有意义。
  • glob.glob('files_path/[!_]*') 这是怎么工作的?
  • 以及如何为这个文件merged_file.json编写表达式

标签: python json list


【解决方案1】:

您可以通过执行glob.glob('*_*_*_*.json') 之类的操作来减少某些 cmets 提到的模式的排他性。更多细节可以在这里找到https://docs.python.org/3.5/library/glob.html#glob.glob

这从来都不是干净的,而且由于 glob 不是常规的正则表达式,它的表现力不是很强。由于订购似乎不是很重要,您可以执行类似

的操作
excludedFiles = ['merged_file.json']
includedFiles = glob.glob('*.json')

# other code here

print list(set(includedFiles) - set(excludedFile))

这回答了您的问题,但是我认为解决您的问题的更好方法是将原始数据和生成的文件分开到不同的目录中。我认为当您对数据进行临时工作时,这通常是一种很好的做法。

【讨论】:

    【解决方案2】:

    如果你只想删除最新添加的文件,那么你可以试试这个代码。

    import os
    import glob
    jsonFiles = []
    jsonPattern = os.path.join('*.json')
    
    fileList = glob.glob(jsonPattern)
    
    for file in fileList:
      jsonFiles.append(file)
    print jsonFiles
    
    latestFile = max(jsonFiles, key=os.path.getctime)
    print latestFile
    
    jsonFiles.remove(latestFile)
    print jsonFiles
    

    输出:

    ['man_pro_desc_nordstrom.json', 'man_pro_desc_Zalando.json', 'men_pro_desc_zalora.json', 'merged_file.json']
    merged_file.json
    ['man_pro_desc_nordstrom.json', 'man_pro_desc_Zalando.json', 'men_pro_desc_zalora.json']
    

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2015-09-26
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多