【问题标题】:Trying to match a Regex filename from a list of FTP files尝试从 FTP 文件列表中匹配正则表达式文件名
【发布时间】:2020-06-09 13:58:39
【问题描述】:

我正在尝试从 ftp 为日常文件创建有条件的下载,我正在努力让正则表达式处理具有唯一时间戳以正确匹配并被下载的文件。这就是我所拥有的。

示例文件名:

BCW_SDP_Rolling_7Days.rpt2020-02-24-07-27-24.csv

这是我能够使用我所知道的构建的:

today = datetime.date.today()
widate = (f"{today:%Y-%m-%d}")
pattern = ("BCW_SDP_Rolling_7Days.rpt"+widate+"*.csv")

我想从 ftp 中提取文件列表进行比较:

ftp_list = connection.nlst()

然后想使用正则表达式与该列表中的文件进行比较以找到正确匹配的文件:

> wistring = re.search(r'"BCW_SDP_Rolling_7Days.rpt"+widate+"*.csv",
> ftp_list) filenameWI = str(wistring) print (filenameWI)

不幸的是,它要么松散地匹配一堆不正确的名称,要么在我尝试过的所有不同迭代中都出现错误。我知道我在这里缺少一些简单的东西,请帮忙。

【问题讨论】:

  • *. 可能有问题。如我所见,您正在匹配 widate 返回零次或多次(这是 * 量词所做的,它不是通配符)的最后一个数字,然后使用 . (一个特殊字符,表示任何字符)。您能否包括widate 返回的确切内容?

标签: python regex ftplib fnmatch


【解决方案1】:

试试这个

代码:

import datetime
import re


filename = "BCW_SDP_Rolling_7Days.rpt2020-02-24-07-27-24.csv"

# current_date = str(datetime.date.today())
current_date = "2020-02-24"
pattern = r"BCW_SDP_Rolling_7Days\.rpt" + current_date + r"(?:-\d{2}){3}\.csv"

if re.search(pattern, filename):
    print("pass")

输出:

pass

【讨论】:

  • 我认为这是在正确的轨道上,但我不只是想找出一个匹配。我需要从“ftp_list”中识别匹配项,它是 ftp 目录中的文件列表,并且如果文件存在,请为该特定匹配项“FilenameWI”的名称定义一个变量。
  • 谢天谢地,我能够使用标准通配符“*”解决问题,而无需 RegEx,但我将它放在口袋里,因为它确实准确地从我想要的列表中提取了值,只是不是我需要的最简单的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2011-05-15
相关资源
最近更新 更多