我正在使用其他人帮助我执行的python脚本,将目录中的所有.jpg或.png文件重命名为我想要的顺序。 因此,如果目录中有20个.png文件,我想按1-20的顺序重命名它们。
我有这个脚本,我对此很满意。但是,仅指出我使用此脚本重命名的文件已损坏。
作为一个例子,当我将1.png重命名为testImage1.png时,我实际上是将testImage10.png重命名为testImage1.png。我通过创建5个具有相同内容的文本文件来对脚本进行测试,但是文本文件1-3中放置了不同的内容以跟踪重命名后的内容。果然,一切都混了。
import os
import sys
source = sys.argv[1]
files = os.listdir(source)
name = sys.argv[2]
def rename():
i = 1
for file in files:
os.rename(os.path.join(source, file), os.path.join(source, name+str(i)+'.png'))
i += 1
rename()
我花时间尝试使用我(有限的)python知识来创建一系列的if / elif语句来筛选并按顺序使用正确的名称重命名文件。
def roundTwo():
print('Beginning of the end')
i = 1
for root, dirs, files in os.walk(source):
for file in files:
print('Test')
if source == 'newFile0.txt' or 'newFile0.png':
os.rename(os.path.join(source, file), os.path.join(source, name+str(i)+'.txt'))
print('Test1')
i += 1
elif source == 'newFile1.txt' or 'newFile1.png':
os.rename(os.path.join(source, file), os.path.join(source, name+str(i)+'.txt'))
print('Test2')
i += 1
roundTwo()
我做了很多搜索以包括Re或fnmatch,但是没有什么比我想要的要精确的多了。也许我使用错误的术语进行搜索?任何见识都会有所帮助!
答案 0 :(得分:1)
如果您的问题出在1
和10
上,则可以使用natural sorting
。对变量files
进行如下排序:
from natsort import natsorted, ns
natsorted(files, alg=ns.IGNORECASE)
示例:
>>> x = ['a/b/c21.txt', 'a/b/c1.txt', 'a/b/c10.txt', 'a/b/c11.txt', 'a/b/c2.txt']
>>> sorted(x)
['a/b/c1.txt', 'a/b/c10.txt', 'a/b/c11.txt', 'a/b/c2.txt', 'a/b/c21.txt']
>>> natsorted(x, alg=ns.IGNORECASE)
['a/b/c1.txt', 'a/b/c2.txt', 'a/b/c10.txt', 'a/b/c11.txt', 'a/b/c21.txt']
答案 1 :(得分:0)
如果所有文件都具有某种基本名称,则可以修改第一个函数以提取分配给图像的编号
baseName='testImage'
def rename():
for file in files:
number=file[len(baseName):file.find('.png')]
os.rename(os.path.join(source, file), os.path.join(source, name+number+'.png'))
希望有帮助