gpt4 book ai didi

python - (初学者)使用 Python 重命名文件 - 重构以获得更好的答案

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:16 24 4
gpt4 key购买 nike

(第一篇文章...对编程很陌生)

我需要将一堆文件从“This is a filename-123456.ext”重命名为“123456-This is a filename.ext”

我设法使用 Python 和下面的代码解决了这个问题。我不得不制作 2 个脚本,因为有时有 5 个数字,但大多数情况下是 6 个。

import os
for filename in os.listdir('.'): #not sure how to rename recursive sub-directories
if filename != 'ren6.py': #included to not rename the script file
start = filename[:-11]
number = filename[-10:-4]
ext = filename[-4:]
newname = str(number) + '-' + str(start)+str(ext) #Unnecessary variable creation?
os.rename(filename,newname)

我仍在学习,并且对完成同一件事的更高效、更优雅的示例非常好奇。

最佳答案

使用正则表达式可能更安全也更强大。这只会重命名与给定模式匹配的文件,即 [任何字符序列][破折号][数字][扩展名]

使用此方法的另一个好处是您可以在同一目录中多次运行它,并且不会影响已重命名的文件。

您可能还需要检查以确保要重命名的文件不存在(这样您就不会覆盖现有文件)。

import re


for filename in os.listdir('.')
m = re.match(r'^(?P<name>.+)-(?P<num>\d+)(?P<ext>\.\w+)$', filename)
if m:
newname = '{num}-{name}{ext}'.format(**m.groupdict())
if not os.path.exists(newname):
os.rename(filename, newname)

我将分解正则表达式

^(?P<name>.+)

^表示我们将从文件名的开头开始匹配(而不是匹配文件名的中间部分)。 ()使它成为一个正则表达式组,这样我们就可以访问字符串匹配的那一部分。 ?P<name>只是一种将标签应用于特定组的方法,以便我们稍后可以通过名称引用它。在这种情况下,我们给这个组一个标签 name .

.将匹配任何字符,并且 +告诉它匹配 1 个或多个字符。

-

这只会匹配 -性格

(?P<num>\d+)

同样,我们将其设为一个组并为其赋予标签 num . \d只会匹配数字和 +表示它将匹配 1 个或多个数字。

(?P<ext>\.\w+)$

另一个组,另一个标签。 \.只会匹配 .\w将匹配单词字符(即字母、数字、下划线)。同样,+表示它将匹配 1 个或多个字符。 $确保它一直匹配到字符串的末尾。

关于python - (初学者)使用 Python 重命名文件 - 重构以获得更好的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com