簡體   English   中英

如何使用Python在不觸及文件名的情況下在每個文件前面添加數字?

[英]How to add numbers infront of each files without touching filename using Python?

我在文件夾中有一些文件(800+),如下所示:

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做到這一點嗎? 請指導如何執行此操作。

使用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))

使用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'

您可以使用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的格式規范迷你語言非常強大。

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

這是重命名當前目錄中文件的快速示例:

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)

暫無
暫無

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

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