我想根据图像所在文件夹的部分名称重命名图像,并在图像中迭代。我正在使用手术室步行我可以重命名文件夹中的所有图像,但不知道如何使用文件夹名称中第一个连字符左边的字母作为图像名称的一部分。
文件夹名:ABCDEF - THIS IS - MY FOLDER - NAME
文件夹中的当前图像名称:
dsc_001.jpg
dsc_234.jpg
dsc_123.jpg
想改成这样:
^{pr2}$我有的是这个,但我不知道为什么我不能用连字符分割文件名:
import os
from os.path import join
path = r'C:\folderPath'
i = 1
for root, dirs, files in os.walk(path):
for image in files:
prefix = files.split(' - ')[0]
os.rename(os.path.join(path, image), os.path.join(path, prefix + '_'
+ str(i)+'.jpg'))
i = i+1
好吧,我读了你的问题,我想我知道怎么了。在
1.)iterable是递归的,也就是说,如果使用
os.walk(r'C:\')
,它将遍历all文件夹并找到C驱动器下的all文件。现在我不确定您的C:\folderPath中是否有子文件夹。如果是这样,并且任何文件夹/文件格式都不是C:\folderPath的约定,那么您的代码将会很糟糕。在2.)当您迭代
files
时,您split()
使用了错误的对象。您的问题状态是希望拆分文件夹名称,但代码正在拆分files
iterable,它是当前迭代目录下所有文件的列表。这并不能实现你想要的。根据您的ABCDEF
文件夹是C:\folderPath还是其中的子文件夹,您需要使用不同的代码。在3.)您已经从
os.path
导入了join
,但是您仍然以调用全名os.path.join()
为结尾,这是多余的。或者只是import os
并调用os.path.join()
,或者只使用当前的导入,只需join()
。在说到这里,以下是我的编辑:
答案1:
如果您的ABCDEF是指定的文件夹
答案2:
假设您的ABCDEF都是指定目录下的所有子文件夹,并且其中的所有都遵循相同的命名约定。
导入操作系统 从操作系统路径导入联接
^{pr2}$注:
如果您的场景不属于这两种情况,请说明您的文件夹结构是什么(一个包含所有子文件夹和子文件的示例)。记住,一致性是决定代码应该如何工作的关键。如果不一致,最好的办法是分别对每个目标文件夹使用答案1。在
更改:
1.)无需执行} 是iterables的一个很好的工具,它还提供了迭代次数。在
i += 1
,就可以获得一个增量索引。^{2.)您的
split()
应该在文件夹名上操作,而不是files
(iterable)。在您的例子中,image
是实际的文件名,files
是当前迭代目录中的文件列表。在3.)使用^{} function 使新文件格式更易于阅读。在
4.)您将注意到使用了},这就是because a single backslash cannot be a raw string.
split("\\")
而不是{现在应该可以了。最后我做了比预期更多的研究,比如how to handle the ^{} properly in both scenarios. 以备将来参考,一点谷歌搜索就可以了。我希望这最终能回答你的问题。记住,做你自己的研究和清晰地展示你的问题会让你得到更有效的答案。在
额外好处:如果您有python 3.6+,您甚至可以使用f strings作为新文件名,这看起来非常酷:
相关问题 更多 >
编程相关推荐