【问题标题】:Glob to match files except certain extensionGlob 以匹配除某些扩展名之外的文件
【发布时间】:2019-08-15 23:48:07
【问题描述】:

python 新手!我正在尝试将globmax 结合使用来查找文件夹中最后修改的文件,但不包括扩展名为pdf 的一种类型。我试过了:

没有排除我有这个工作正常:

crshLogs = glob.glob(homePath+crshLogPath+'*.*')
currCrshLog = max(crshLogs , key = os.path.getmtime)

尝试排除我尝试过的pdf:

crshLogs = glob.glob(homePath+crshLogPath+'!(*.pdf)')

还有

crshLogs = glob.glob(homePath+crshLogPath+'*.*') - glob.glob(homePath+crshLogPath+'*.pdf')

但在这两种情况下,下一行代码都失败并显示ValueError: max() arg is an empty sequence,因此大概没有返回任何内容。

任何帮助将不胜感激!

【问题讨论】:

  • crshLogs = [x for x in glob.glob(homePath+crshLogPath+'*.*') if x not in glob.glob(homePath+crshLogPath+'*.pdf')] 怎么样?
  • @NihalSangeeth 正在扫描目录两次。更好地使用fnmatch
  • 试过@NihalSangeeth。似乎不起作用。还是退回了 PDF?
  • 真的吗?您能否提供每个列表和返回的 PDF 的示例?
  • 不让我早点编辑!我的错。那里还有旧的代码行。感谢您的帮助

标签: python macos unix


【解决方案1】:
[filename for filename in glob.glob(homePath+crshLogPath+'*.*') if not filename.endswith('pdf')]

我也会改变

crshLogs = glob.glob(homePath+crshLogPath+'.')

crshLogs = glob.glob(os.path.join(homePath, crshLogPath, *.*')

这将处理糟糕的边缘情况,例如 homePath 不是以 / 结尾,而 crshLog 路径不是以 / 开头,这会造成混乱

【讨论】:

  • 更好:glob.glob(os.path.join(homePath, crshLogPath,'*.*'))
  • 谢谢大家。我尝试将行更改为crshLogs = [filename in glob.glob(os.path.join(homePath, crshLogPath, '*.*')) if not filename.endswith('pdf')],但出现语法错误。我误读了什么吗?干杯
  • 是 改成文件名 fpr filename in
【解决方案2】:

您可以创建一个数组而不将 pdf 放入其中:

file_list=[]
for filename in glob.glob(homePath+crshLogPath+'*.*'):
    if ".pdf" not in filename:
        file_list.append(filename)

然后从该数组中获取您的文件名。

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多