2015-09-09 39 views
0

我有一個文件列表,每個文件都有相同的名稱。當它們被複制到我的目錄中時,操作系統會自動添加(1),(2)等以區分它們。它們是同一個文件的不同版本。從Python的文件名末尾刪除整數

我該如何去系統地刪除字符串末尾的數字加法?直接在這一步之後,我將在每個文件的創建時間結束時添加。

ex。

file.pdf 
file (1).pdf 
file (2).pdf 
file (3).pdf 

隨後將成爲

file-2015-08-08T10:06:59Z.pdf 
file-2015-07-08T10:06:59Z.pdf 
file-2015-06-08T10:06:59Z.pdf 
file-2015-05-08T10:06:59Z.pdf 

回答

0

要做到這一點在當前目錄:

import os, time 
for filename in os.listdir("."): 
    if filename.startswith("file"): 
     os.rename(filename, filename[4:-4] + time.ctime(os.path.getctime(filename)) + ".pdf") 

剛剛替補「文件」不管什麼文件名的開頭是數字和前4 [4:-4]與該字符串的長度。 如果您想以與ctime不同的方式顯示時間,只需將time.ctime(os.path.getctime(filename))替換爲返回當前字符串的內容即可。

+0

你會在中間得到「.pdf」,不是嗎?也許你應該有'filename [4:-4]'並且在最後貼上'.pdf'。 – saulspatz

+0

@saulspatz謝謝,我沒有意識到這一點 – dietbacon

0

基於@瓊的和@ dietbacon的解決方案:

import os 
import re 
import time 
for filename in filenames: 
    new_name = re.sub("\([0-9]+\)",time.ctime(os.path.getctime(filename))+".pdf", filename) 
    os.rename(filename, new_name) 
0

這裏是所有文件的擴展名

import os 
import re 
import datetime 

dirname = os.path.abspath("./test") # target directory 
for filename in os.listdir(dirname): 
    filepath = os.path.join(dirname, filename) 
    fname, fext = os.path.splitext(filename) 
    match = re.search("(.+?)\s\([0-9]+\)",fname) 
    if match: 
     fname = match.group(1) 
    ctime = os.path.getctime(filepath) 
    ctime = datetime.datetime.utcfromtimestamp(ctime).isoformat() 
    newfilepath = os.path.join(dirname, fname + "-" + ctime + fext) 
    os.rename(filepath, newfilepath) 

注意一種解決方案:結腸未在文件名中的窗口允許的。