Python正则表达式:重命名名称中除具有今天日期的文件以外的所有文件

时间:2018-11-06 21:54:51

标签: python regex file rename

我正在尝试重命名文件夹中的所有文件,并从文件名中删除空格。所有文件名称中的日期均为YY-mm-dd。以下是到目前为止我已经设法创建的内容。

但是,运行时给我一个“ TypeError:从第一个arg开始的字符串必须是str或str的元组,而不是_sre.SRE_Pattern”

import os
import datetime
import re
today = datetime.datetime.now()
path = "/some/path/"
regex = re.compile(".*" + today.strftime("(%Y-%m-%d)") + ".*(.log$)", re.IGNORECASE)
for file in os.listdir(path):
    os.rename(file.startswith(regex), file.replace(" ","_")

注意:我知道在当前状态下,它将查找今天的日期,而不是今天以外的所有日期。我将其保持原样进行测试,并在匹配后自动将其与正则表达式匹配。

先谢谢您。

2 个答案:

答案 0 :(得分:0)

错误的答案似乎是正确的,startswith的参数必须是字符串,而不是编译的正则表达式模式。因此,基本上它告诉您startswith不能使用正则表达式模式作为参数。嘿-这就是正则表达式的目的!

您应使用正则表达式模式^表示行的开头,然后将文件名与该模式匹配。

这是一个粗略的例子:

...
regex = re.compile("^.*" + today.strftime("(%Y-%m-%d)") + ".*(.log$)", re.IGNORECASE)
for file in os.listdir(path):
     if regex.match(file): 
         # do something 

答案 1 :(得分:0)

您的file.startswith(regex)将返回True或False。我认为您要重命名与您的正则表达式匹配的文件。您需要在for循环下使用另一个“ if”语句来检查文件名是否以正则表达式开头,然后您需要运行os.rename:

sudo service couchbase-server start