我正在建立一个数据库,收集文件夹中的数千张图片。我正在使用python脚本重命名数据库中的文件,但问题是每当我将图像添加到文件夹并重命名它们时,它会为所有文件提供不同的名称。有没有办法不以某种格式重命名文件?
{
"amount_money": {
"amount" : "100",
"currency_code" : "USD"
},
"auto_return":true,
"callback_url" : "https://floating-inlet-19449.herokuapp.com/redirect",
"client_id" : "sq0idp-U8x6mJyLFtHuhCfv9sqL5g",
"version": "1.3",
"notes": "notes for the transaction",
"options" : {
"supported_tender_types" : ["CREDIT_CARD"]
}
答案 0 :(得分:1)
使用模式匹配检查文件名是否与您的格式匹配。此外,检查是否存在新文件名并递增计数器,直到找到未使用的文件名:
import os
import glob
import re
src = r'path\to\directory'
ext = '.png'
i = 0
for filename in glob.glob(os.path.join(src,'*' + ext)):
if not re.search('People-\d\d\d' + re.escape(ext) +'$',filename):
while True:
newname = os.path.join(src,'People-{:03d}{}'.format(i,ext))
if os.path.exists(newname):
i += 1
else:
break
print('renaming "%s" to "%s"...' % (filename, newname))
os.rename(filename,newname)
以下是文件起始列表的示例:
People-000.png
People-001.png
People-003.png
a.png
b.png
c.png
并输出:
renaming "a.png" to "People-002.png"...
renaming "b.png" to "People-004.png"...
renaming "c.png" to "People-005.png"...
答案 1 :(得分:1)
因此,首先需要找出序列中最大的文件名。您可以使用glob功能。
给定此文件夹结构:
(venv) user@MacBookPro:~/Projects/test$ ls -al
total 16
drwxr-xr-x 7 user staff 238B Jul 31 12:34 ./
drwxr-xr-x@ 17 user staff 578B Jul 14 13:58 ../
-rw-r--r--@ 1 user staff 6.0K Mar 8 2016 .DS_Store
-rw-r--r-- 1 user staff 0B Jul 31 12:34 People-001.png
-rw-r--r-- 1 user staff 0B Jul 31 12:34 People-002.png
-rw-r--r-- 1 user staff 0B Jul 31 12:34 People-003.png
-rw-r--r-- 1 user staff 0B Jul 31 12:34 foo.png
(venv) user@MacBookPro:~/Projects/test$ python
Python 3.6.1 (default, Apr 4 2017, 09:40:21)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from glob import glob
>>> glob('/Users/user/Projects/test/People-???.png')
['/Users/user/Projects/test/People-001.png', '/Users/user/Projects/test/People-002.png', '/Users/user/Projects/test/People-003.png']
>>> max(glob('/Users/user/Projects/test/People-???.png'))
'/Users/user/Projects/test/People-003.png'
>>> max(glob('/Users/user/Projects/test/People-???.png')).split('.')[0].split('-')[1]
'003'
接下来,由于 枚举(os.listdir(_src)) 包含不感兴趣的文件,因此无法使用其索引。所以只是上面的最大指数:
>>> max_index = int(max(glob('/Users/user/Projects/test/People-???.png')).split('.')[0].split('-')[1])
>>> for idx,name in enumerate(os.listdir('/Users/user/Projects/test/')):
... if not name.startswith('People'):
... max_index += 1
... print (max_index, name)
...
4 .DS_Store
5 foo.png
然后过滤掉隐藏的文件。