前言
对 python 常用的一些脚本代码使用进行说明整理
一、图片操作
1.1 图片批量重命名
# coding=utf-8
"""
批量修改文件名
运行指令:
python change_file_name.py --selected_images=./test/ --images_new_path=./test2/
@author: libo
"""
import os
import shutil
import argparse
def get_parser():
parser = argparse.ArgumentParser(description='change_file_name')
# parser.add_argument('--work_dir', default='', type=str, nargs=1, help='WORK_DIR')
parser.add_argument('--selected_images', default='', type=str, nargs=1, help='image_path')
parser.add_argument('--images_new_path', default='', type=str, nargs=1, help='image_new_path')
return parser
def batch_rename(old_path, new_path):
""" 批量修改文件名 """
for img_name in os.listdir(old_path):
print(img_name)
bfn, ext = os.path.splitext(img_name)
if ext.lower() not in ['.jpg', '.png']:
continue
new_name = bfn + '2'
shutil.copyfile(os.path.join(old_path, img_name), os.path.join(new_path, new_name + ext))
print("完成重命名")
def main():
# 命令行参数
parser = get_parser()
args = vars(parser.parse_args())
# work_dir = args['work_dir'][0]
old_path = args['selected_images'][0]
new_path = args['images_new_path'][0]
batch_rename(old_path, new_path)
if __name__ == '__main__':
main()
1.2 图片批量修改后缀名
# coding=utf-8
"""
工作目录中文件后缀名修改
运行指令:
python change_file_ext.py --work_dir=./test/ --old_ext=jpg --new_ext=png
@author: libo
"""
import os
import argparse # 定义脚本参数
def get_parser():
parser = argparse.ArgumentParser(description='change_file_ext')
parser.add_argument('--work_dir', default='', type=str, nargs=1, help='WORK_DIR')
parser.add_argument('--old_ext', default='', type=str, nargs=1, help='OLD_EXT')
parser.add_argument('--new_ext', default='', type=str, nargs=1, help='NEW_EXT')
return parser
def batch_rename(work_dir, old_ext, new_ext):
""" 后缀名批量修改 """
for filename in os.listdir(work_dir):
bfn, ext = os.path.splitext(filename) # 获取得到文件后缀
# 定位后缀名为old_ext 的文件
if old_ext == ext:
newfile = bfn + new_ext # 修改后文件的完整名称
os.rename(os.path.join(work_dir, filename), os.path.join(work_dir, newfile)) # 实现重命名操作
print("完成重命名")
print(os.listdir(work_dir))
def main():
# 命令行参数
parser = get_parser()
args = vars(parser.parse_args())
work_dir = args['work_dir'][0]
old_ext = args['old_ext'][0]
if old_ext[0] != '.':
old_ext = '.' + old_ext
new_ext = args['new_ext'][0]
if new_ext[0] != '.':
new_ext = '.' + new_ext
batch_rename(work_dir, old_ext, new_ext)
if __name__ == '__main__':
main()
1.3 图片批量 resize
# coding=utf-8
"""
批量修改文件夹下的图片大小
运行指令:
python chess_resize.py --work_dir=./test/ --out_dir=./resize_test/
@author: libo
"""
import os
import cv2
import shutil
import argparse # 定义脚本参数
def get_parser():
parser = argparse.ArgumentParser(description='change_img_size')
parser.add_argument('--work_dir', default='', type=str, nargs=1, help='WORK_DIR')
parser.add_argument('--out_dir', default='', type=str, nargs=1, help='OUT_DIR')
return parser
def batch_resize(work_dir, out_dir, width=640, height=480):
""" 图片大小批量修改 """
for imgname in os.listdir(work_dir):
bfn, ext = os.path.splitext(imgname)
if ext.lower() not in ['.jpg', '.png', '.tiff']:
continue
img_src = cv2.imread(work_dir + imgname, cv2.IMREAD_ANYCOLOR)
try:
img_dst = cv2.resize(img_src, (width, height), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(out_dir, imgname), img_dst)
except Exception as e:
print(e)
def main():
parser = get_parser()
args = vars(parser.parse_args())
work_dir = args['work_dir'][0]
out_dir = args['out_dir'][0]
batch_resize(work_dir, out_dir)
if __name__ == '__main__':
main()
二、文件操作
# -*- coding: utf-8 -*-
"""
file_utils: 文件操作
@author: libo
"""
import os
def get_files(img_dir):
imgs, masks, xmls = list_files(img_dir)
return imgs, masks, xmls
def list_files(in_path):
""" 将文件夹中的各种文件分割开来 """
img_files = []
mask_files = []
gt_files = []
for (dirpath, dirnames, filenames) in os.walk(in_path):
for file in filenames:
filename, ext = os.path.splitext(file) # 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作
ext = str.lower(ext)
if ext == '.jpg' or ext == '.jpeg' or ext == '.gif' or ext == '.png' or ext == '.pgm':
img_files.append(os.path.join(dirpath, file))
elif ext == '.bmp':
mask_files.append(os.path.join(dirpath, file))
elif ext == '.xml' or ext == '.gt' or ext == '.txt':
gt_files.append(os.path.join(dirpath, file))
elif ext == '.zip':
continue
return img_files, mask_files, gt_files
""" 图片路径信息写入txt """
# encoding:utf-8
import os
file_path = "./"
path_list = os.listdir(file_path) # 遍历文件夹内的文件并返回一个列表
path_name=[]
for i, name in enumerate(path_list):
path_name.append(file_path + name + ' 0')
for file_name in path_name:
# "a"表示以不覆盖的形式写入到文件中,当前文件夹如果没有"save.txt"会自动创建
with open("save.txt", "a") as f:
f.write(file_name + "\n")
f.close()