![](/img/trans.png)
[英]How to efficiently parse emails without touching attachments using 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.