【发布时间】:2014-07-02 02:49:55
【问题描述】:
来自 MATLAB 的全新 Python。基本上没有 UNIX 或正则表达式知识。
我有一些分类到文件夹中的数据进行处理。我想获取要处理的文件列表,因此我提示输入顶级文件夹并搜索该文件夹和子文件夹中的所有内容以查找匹配项。在 Python 文档和 SO 上的各种内容之间,我已经了解了大部分情况:
from Tkinter import Tk
import tkFileDialog
import os
import fnmatch
def recursivedecodeprompt():
root = Tk()
root.withdraw()
toplevel = tkFileDialog.askdirectory(title='Select Top Level Directory')
filelist = []
for root, dirnames, filenames in os.walk(toplevel):
for filename in fnmatch.filter(filenames, 'LOG.*'):
filelist.append(os.path.join(root, filename))
return filelist
我的问题与模式字符串有关。我的文件夹中可能只有一个 LOG.001 文件,或者它们可能有 LOG.001、LOG.001.csv、LOG.001.gps 等,我当前的模式也匹配。我以为我可以很聪明并使用'LOG.???',但它返回相同的列表。
有没有一种简单的方法可以让fnmatch 忽略在 3 位 ID 之后附加任何内容的文件?有没有更适合这项工作的工具?
半相关的附带问题:有没有办法让tkFileDialog.askdirectory() 对话框可以调整大小?
编辑:澄清一下,文件名的数字部分可以并且将会改变,所以我可以有LOG.001、LOG.002、LOG.003 等。我希望这是一个不那么烦人的命名约定,但就是这样从设备中出来。
【问题讨论】:
-
尝试使用 re
re.findall("LOG.001.*",filenames),从未使用过 fnmatch 但也许可以使用相同的表达式。 -
我认为
re.findall()不能用于列表 -
遍历列表就可以使用
-
@PadraicCunningham 我希望通过另一个扩展名排除任何内容,所以我只想要
LOG.001、LOG.002等。
标签: python python-2.7