2017-05-08 15 views
2

我在文件夾(800+),如下圖所示的一些文件:如何在不觸及文件名的情況下使用Python添加每個文件的infront數?

test_folder 
    1_one.txt 
    2_two.txt 
    3_three.txt 
    4_power.txt 
    5_edge.txt 
    6_mobile.txt 
    7_test.txt 
    8_power1.txt 
    9_like.txt 
    10_port.txt 
    11_fire.txt 
    12_water.txt 

我要重命名使用Python這樣所有這些文件:

test_folder 
    001_one.txt 
    002_two.txt 
    003_three.txt 
    004_power.txt 
    005_edge.txt 
    006_mobile.txt 
    007_test.txt 
    008_power1.txt 
    009_like.txt 
    010_port.txt 
    011_fire.txt 
    012_water.txt 

我們能做到這一點與Python?請指導如何做到這一點。

+0

您可以根據'「_」'分割的文件名,轉換爲數字,並添加尾隨零。然後再使用'「_」加入它。join(splitted_name)'。 –

回答

1

使用zfill:

拆分基於下劃線_,然後用zfill墊零的

import os 

os.chdir("test_folder") 
for filename in os.listdir("."): 
    os.rename(filename, filename.split("_")[0].zfill(3) + filename[filename.index('_'):]) 

轉換爲整數:

只有前綴爲有效整數時才重命名。使用format(num, '03')來確保整數用適當的前導零填充。重命名文件1_file.txt,12_water.txt但跳過a_baa.txt等

import os 

os.chdir("E:\pythontest") 
for filename in os.listdir("."): 
    try: 
     num = int(filename.split("_")[0]) 
     os.rename(filename, format(num, '03') + filename[filename.index('_'):]) 
    except: 
     print 'Skipped ' + filename 

編輯:兩個片段確保如果文件名包含多個下劃線那麼後來者不剪斷。所以1_file_new.txt被重命名爲001_file_new.txt

例子:

# Before 
'1_one.txt', 
'12_twelve.txt', 
'13_new_more_underscores.txt', 
'a_baaa.txt', 
'newfile.txt', 
'onlycharacters.txt' 

# After 
'001_one.txt', 
'012_twelve.txt', 
'013_new_more_underscores.txt', 
'a_baaa.txt', 
'newfile.txt', 
'onlycharacters.txt' 
+0

我有一些帶有多個下劃線的文件。在這種情況下,它會在第二個下劃線後切斷所有字符。如何提及只考慮第一個下劃線? – rcubefather

+0

我害怕同樣的事情,應該已經考慮到了這一點。我已經更新瞭解決方案的答案。請測試一下,讓我知道它是否有效。謝謝! – degant

+0

非常感謝...它的工作。 – rcubefather

4

使用zfill墊零

import os,glob 

src_folder = r"/user/bin/" 
for file_name in glob.glob(os.path.join(src_folder, "*.txt")): 
    lst = file_name.split('_') 
    if len(lst)>1: 
    try: 
     value=int(lst[0]) 
    except ValueError: 
     continue 
    lst[0] = lst[0].zfill(3) 
    os.rename(file_name, '_'.join(lst)) 
+1

'a_test.txt'會被轉換爲'00a_text.txt' –

+0

@MartinEvans更新了代碼 –

0

您可以使用glob.glob()得到的文本文件列表。然後使用正則表達式來確保被重命名的文件以數字和下劃線開頭。然後將文件拆分起來,並添加前導零如下:

import re 
import glob 
import os 

src_folder = r"c:\source folder"  

for filename in glob.glob(os.path.join(src_folder, "*.txt")): 
    path, filename = os.path.split(filename) 
    re_file = re.match("(\d+)(_.*)", filename) 

    if re_file: 
     prefix, base = re_file.groups() 
     new_filename = os.path.join(path, "{:03}{}".format(int(prefix), base)) 
     os.rename(filename, new_filename) 

{:03}告訴Python來填零您的號碼3個位數。 Python的Format Specification Mini-Language非常強大。

注意os.path.join()用於安全地連接路徑組件,因此您不必擔心尾隨分隔符。

0

這裏有一個簡單的例子,在當前目錄中的文件重命名:

import os 

for f in os.listdir("."): 
    if os.path.isfile(f) and len(f.split("_")) > 1: 
     number, suffix = f.split("_") 
     new_name = "%03d_%s" % (int(number), suffix) 
     os.rename(f, new_name) 
相關問題