開發的第一步,首先得熟悉腳本中使用的模塊函數,廢話不多說,開干!
1 函數介紹
1.1 os 模塊
(1)os.lisdir()
>>> import os
>>> print(os.listdir())
['.env', 'rename.py', '.rename.py.swp']
此函數的作用即列出指定目錄下的所有文件與目錄的名,並以列表形式展現。
(2)os.path.splitext()
>>> import os
>>> print(os.path.splitext('rename.py'))
('rename', '.py')
在函數中指定一個文件名,用於分割文件名與后綴,結果存儲於元組中
(3)os.path.join()
>>> import os
>>> print(os.path.join('/etc','nginx','nginx.conf'))
/etc/nginx/nginx.conf
將函數中的目錄、文件組合成一個路徑
(4)os.rename()
>>> import os
>>> os.rename('src','dest') # src 為原文件名,dest 為目標文件名
將目錄或文件重命名
1.2 argparse 模塊
Python 中內置模塊,用於解析給出的函數參數,生成有用信息。
# argparse 模塊示例源碼
[root@localhost Python]# cat test.py
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
print(args.integers)
# 使用示例
[root@localhost Python]# python test.py -h
usage: test.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
[root@localhost Python]# python test.py 123 45 8 --sum
176 # 求和后的值
[123, 45, 8]
[root@localhost Python]# python test.py 123 45 8
123 # 未添加 sum 參數,默認顯示參數中最大值,對應 add_argument 的 default=max
[123, 45, 8]
# 示例摘自鏈接:https://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html
argparse 模塊的使用分為四步走,模塊導入 -> ArgumentParser 創建對象 -> add_argument 添加參數 -> parse_args 調用
add_argument 函數中部分參數含義:
metavar # 在 usage 中顯示的參數名稱
type # 接收到的參數,需轉換成的目標類型
nargs # 表示參數個數,上例使用 +,代表有1個或多個參數
help # usage 中顯示的參數幫助信息
dest # 可用此參數重定義的值訪問參數(args.accumulate(args.integers)),基於上面示例
2 腳本文件
import argparse,os
# 解析參數,並生成 usage 提示,-h 顯示幫助
def parse():
parser = argparse.ArgumentParser(description='批量修改文件名')
parser.add_argument('target_dir', metavar='TARGET_DIR', type=str, nargs=1, help='需批量修改文件所在目錄')
parser.add_argument('old_ext', metavar='OLD_EXT', type=str, nargs=1, help='舊文件后綴')
parser.add_argument('new_ext', metavar='NEW_EXT', type=str, nargs=1, help='新文件后綴')
return parser
def filename_modify(target_dir,old_ext,new_ext):
for filename in os.listdir(target_dir):
file = os.path.splitext(filename) # 將文件名與后綴分割開
file_ext = file[1] # 獲得舊后綴
if old_ext == file_ext: # 查看此目錄中是否有需修改的舊后綴文件
newname = file[0] + new_ext
# 文件或目錄重命名
os.rename(
os.path.join(target_dir, filename),
os.path.join(target_dir, newname)
)
def main():
parser = parse()
args = vars(parser.parse_args())
work_dir = args['target_dir'][0]
old_ext = args['old_ext'][0]
new_ext = args['new_ext'][0]
if old_ext[0] != '.':
old_ext = '.' + old_ext
if new_ext[0] != '.':
new_ext = '.' + new_ext
filename_modify(work_dir,old_ext,new_ext)
if __name__ == '__main__':
main()
main 函數中,args的值類似如下內容
python rename.py /root/Test txt py
{'work_dir': ['/root/Test'], 'old_ext': ['txt'], 'new_ext': ['py']}
因此,在 main 中,第一個索引 0 取的值為運行的命令行參數(列表),第二個索引值 0 用於判斷帶參數運行的文件后綴參數是否帶有點
——————————————————————— END ———————————————————————