查找Python中具有数字后缀的文件

时间:2016-06-07 21:49:07

标签: python

通过说我对Python完全不熟悉,但不是编程新手来做到这一点。

我一直在尝试使用glob.glob编译文件名列表以供进一步分析。

我的文件遵循以下格式:

  • 档案1.csv
  • 文件2.csv
  • 档案3.csv
  • ...

现在,我使用

检查文件
glob.glob("File ?.csv")

然而,我刚刚意识到,当我到达File 10时,这将不再有效,因为'?'通配符只能替换1个字符。

除了必须重命名这些文件以符合位数之外(例如:格式化文件3到03,如果文件数> 10但是<100),我可以通过哪些方式来容纳附加数字?

我可以在一定程度上预测文件的数量,但数量可以是1到10,甚至是数百个。

2 个答案:

答案 0 :(得分:3)

你不能用glob匹配任意数量的数字,如果你想特别匹配File some_digits.csv,你需要一个正则表达式:

import glob
import re
import os
patt = re.compile(r"File \d+\.csv")
for f in os.listdir("."):
    if patt.match(f):
        print(f)

如果您确定如果有一个数字,那么这是一个匹配,您可以使用File [0-9]*.csv,这将确保有一个数字:

import glob

glob.glob("/path_to/File [0-9]*.csv"))

当然,这也会与File 1abc.csv匹配,但您当前的"File ?.csv"会匹配File a.csv等等。这不是数字。

答案 1 :(得分:0)

分两步完成:

import glob
import re

# First match all files which fit the general pattern (will match things
# like "File name without numbers.csv"
gross_match = glob.glob("File *.csv")
# Filter the list with a precise regular expression
my_files = [fname for fname in gross_match if match("File [0-9]+.csv", fname)]

通过预编译正则表达式可以提高性能。