如何从python中的多个文件中删除字符

时间:2016-08-24 14:52:01

标签: python batch-rename

我试着编写一个简单的程序来批量重命名文件夹中的文件。

文件格式:

11170_tcd001-20160824-094716.txt

11170_tcd001-20160824-094716.rst

11170_tcd001-20160824-094716.raw

在第一个" - "之后,我有48个以上不同的14位字符配置。

我的最终目标是将上述内容转换为:

11170_tcd001.txt

11170_tcd001.rst

11170_tcd001.raw

我知道可以在python中使用os.rename文件。但是,我无法弄清楚如何使用不同的字符配置批量重命名多个文件。

这可能吗?

下面我想要实现的一些伪代码。

import os

pathiter = (os.path.join(root, filename)
    for root, _, filenames in os.walk(folder)
    for filename in filenames
)
for path in pathiter:
    newname =  path.replace('14 digits.txt', ' 0 digits.txt')
    if newname != path:
        os.rename(path,newname)

2 个答案:

答案 0 :(得分:4)

如果您正在寻找非正则表达式方法,并且考虑到您的文件都符合您期望的特定模式,那么您首先要做的是使用splitext获取文件的扩展名:

from os.path import splitext
file_name = '11170_tcd001-20160824-094716.txt'
extension = splitext(file_name)[1]
print(extension) # outputs: .txt

然后,使用扩展程序,在-上拆分file_name并获取第一个项目,因为您知道这是您要保留的部分:

new_filename = file_name.split('-')[0]
print(new_filename) # 11170_tcd001

现在,追加扩展名:

new_filename = new_filename + extension
print(new_filename) # 11170_tcd001.txt

现在您可以继续重命名:

os.rename(file_name, new_filename)

答案 1 :(得分:2)

您应该尝试使用正则表达式,例如

import re

<...>

newfilename = re.sub(r'-\d{8}-\d{6}\b', '', oldfilename)

<...>

这将取代任何连字符,8位数字,连字符,6位数字&#39;文件名后面没有字母,数字或下划线,空字符串。希望我帮到你。