『python』python基础教程(4) — 常用操作


前言

对 python 常用的一些脚本代码使用进行说明整理

  1. 『python』python基础教程(1) — 基本数据结构
  2. 『python』python基础教程(2) — 基础知识整理
  3. 『python』python基础教程(3) — 高阶方法使用

一、图片操作

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()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值