1

每周我都会收到两个具有以下模式的文件。

EMEA_{sample}_Tracker_{year}_KW{week}

例如

EMEA_G_Tracker_2019_KW52.xlsx

EMEA_BC_Tracker_2019_KW52.xlsx

下一个文件看起来像这些

EMEA_G_Tracker_2020_KW1.xlsx

EMEA_BC_Tracker_2020_KW1.xlsx

占位符:

  • 样品 = G 或 BC
  • 年份 = 当前年份 [YYYY]
  • 周 = 日历周 [0 - ~52]

唯一的更改是在占位符中进行的,其他一切都将保持不变。

如何从文件名中提取这些值并检查文件名是否具有这种格式?

现在我只使用以下方式读取所有文件os.walk()

path_files = "Files/"

files = []
for (_, _, filenames) in walk(path_files):
    files.extend(filenames)
    break
4

2 回答 2

1

如果filename是您拥有的文件的名称:

import re

result = re.match(r'EMEA_(.*?)_Tracker_(\d+)_KW(\d+)', filename)
sample, year, week = result.groups()
于 2020-01-20T09:53:13.647 回答
0

这是一个示例,说明如何使用regexlist comprehension将与您的模式匹配的所有文件收集到一个列表中。然后,您可以在以后的代码中随意使用该列表。

import os
import re

# Compile the regular expression pattern.
re_emea = re.compile('^EMEA_(G|BC)_Tracker_20\d{2}_KW\d{1,2}.xlsx$')
# Set path to be searched.
path = '/home/username/Desktop/so/emea_files'

# Collect all filenames matching the pattern into a list.
files = [f for f in os.listdir(path) if re_emea.match(f)]

# View the results.
print(files)

目录下的所有文件:

['EMEA_G_Tracker_2020_KW2.xlsx',
 'other_file_3.txt',
 'EMEA_G_Tracker_2020_KW1.xlsx',
 'other_file_2.txt',
 'other_file_5.txt',
 'other_file_4.txt',
 'EMEA_BC_Tracker_2019_KW52.xlsx',
 'other_file_1.txt',
 'EMEA_G_Tracker_2019_KW52.xlsx',
 'EMEA_BC_Tracker_2020_KW2.xlsx',
 'EMEA_BC_Tracker_2020_KW1.xlsx']

模式匹配的结果:

['EMEA_G_Tracker_2020_KW2.xlsx',
 'EMEA_G_Tracker_2020_KW1.xlsx',
 'EMEA_BC_Tracker_2019_KW52.xlsx',
 'EMEA_G_Tracker_2019_KW52.xlsx',
 'EMEA_BC_Tracker_2020_KW2.xlsx',
 'EMEA_BC_Tracker_2020_KW1.xlsx']

希望这可以帮助!如果没有,请给我一个喊叫。

于 2020-01-20T20:17:47.993 回答