Python文件名正则表达式提取

时间:2018-07-24 07:24:35

标签: python regex python-3.x

我正在尝试将文件粘贴从一个文件夹复制到另一个文件夹。但是,此文件每天都会生成,因此文件名会更改。我想创建一个reg表达式,以标识文件夹中的正确文件。我对正则表达式不熟悉,所以也许我可以获得一些提示?

复制文件的文件路径如下:     G:\交易报告_Daily1_FI_2000_2018-07-24-06-40-42.xlsx

这部分在所有文件中都相同。

交易报告_每日 这部分发生了变化。

2018-07-24-06-40-42.xlsx

我认为我可以使用datetime模块来帮助确定正确的日期。但是,日期(-06-40-42)之后的数字是随机的。

import re, os

from datetime import date
today = date.today()

RNRegex = re.compile(r'Rolfe and Nolan Trade Reports_Daily1_FI_2000_' + str(today) +'-\d\d-\d\d-\d\d.xlsx')
#os.listdir(r'G:RLN FI Reports')

for RNfile in os.listdir(r'G:\RLN FI Reports'):
    mo = RNRegex.search(RNfile)

    if mo == None:
        continue
    else:
        print(mo)

EDIT:
My Output now

runfile('C:/Users/z000xxx/.spyder-py3/untitled21.py', 
wdir='C:/Users/z000xxc/.spyder-py3')
<_sre.SRE_Match object; span=(0, 69), match='Rolfe and Nolan Trade 
Reports_Daily1_FI_2000_2018>

3 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

 today = date.strftime(date.today(), "%Y-%m-%d")

 RNRegex = re.compile("Rolfe and Nolan Trade Reports_Daily1_FI_2000_" + today + "(-\d{2}){3}\.xlsx")

另一方面,如果要获取文件名,则无法打印search的结果,则需要使用print(mo.group(0))

我不得不使用date.strftime来格式化date.today,以使其有时不将月份和日期打印为一位数字

编辑:仅匹配今天的文件

答案 1 :(得分:-1)

您可以简单地列出文件夹中的内容,然后以“ Rolfe and Nolan Trade Reports_Daily”开头的文件进行移动,而无需使用任何正则表达式。看起来像这样:

import os
files = os.listdir('G:\RLN FI Reports')
for f in files:
    if f.startswith('Rolfe and Nolan Trade Reports_Daily'):
        # move the file wherever you want

答案 2 :(得分:-1)

您也可以使用glob.glob('G:\Path\To\Files\Keywords_*.ext')。行为类似于Windows命令dir,星号为贪婪字符。

示例:glob

>> import glob
>> glob.glob('C:\Windows\*.dll')
['C:\\Windows\\EvtMessage.dll',
 'C:\\Windows\\RtlExUpd.dll',
 'C:\\Windows\\twain.dll',
 'C:\\Windows\\twain_32.dll']

示例:窗口命令

C:\>dir /B C:\Windows\*.dll
EvtMessage.dll
RtlExUpd.dll
twain.dll
twain_32.dll

在此示例中,我没有在文件名中使用关键字。您可能要使用Rolfe and Nolan Trade Reports_Daily1_FI_2000_