簡體   English   中英

如何調整代碼以新的數字開頭?

[英]How can i adjust my code to start with a new number?

import os
src = "/home/user/Desktop/images/"
ext = ".jpg"
for i,filename in enumerate(os.listdir(src)):
    # print(i,filename)

    if filename.endswith(ext):
        os.rename(src + filename, src + str(i) + ext)
        print(filename, src + str(i) + ext)
    else :
        os.remove(src + filename)

此代碼將重命名文件夾中以0.jpg,1.jpg等開頭的所有圖像,並且不刪除任何jpg,但是如果我已經在該文件夾中包含一些圖像,那么假設我有圖像0.jpg,1。 jpg,2.jpg,然后我添加了其他幾個,分別稱為im5.jpg和someImage.jpg。

我想要做的是調整代碼以讀取最后一個圖像編號的值,在這種情況下為2,然后從3開始計數。 換句話說,我將忽略已標記的圖像,並繼續從3開始計數。

簡潔的半測試版本:

import os
import glob
offset = sorted(int(os.path.splitext(os.path.basename(filename))[0]) 
                for filename in glob.glob(os.path.join(src, '*' + ext)))[-1] + 1

for i, filename in enumerate(os.listdir(src), start=offset):
    ...

提供的所有* .jpg文件在擴展名前包含一個數字。 否則,您將得到ValueError

而且,如果在編號上恰好有間隔,則該間隔將不會填充新文件。 例如,1.jpg,2.jpg,3.jpg,123.jpg會繼續顯示124.jpg(無論如何還是比較安全)。


如果您需要過濾掉諸如im5.jpg或someImage.jpg之類的文件名,則可以使用正則表達式將if子句添加到列表推導中:

import os
import glob
import re
offset = sorted(int(os.path.splitext(os.path.basename(filename))[0]) 
                for filename in glob.glob(os.path.join(src, '*' + ext))
                if re.search('\d+' + ext, filename))[-1] + 1

當然,到現在為止,這三行代碼還不太可讀,可能無法贏得代碼選美大賽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM