简易python脚本速查

简易python脚本速查

社蕙 142 2023-03-01

记录一些简单的python脚本,为了简单化,尽可能使用标准库。也许以后ChatGPT可以做到一切,但至少我曾经手写过。

查缺补漏

为了整理莱莎的MOD,需要给没有.gz文件的MOD补全原版游戏对应的.gz文件。因为有些MOD自带.gz用来删除替换模型,如果之后用没有.gz的MOD做二次替换,就会造成部位缺失

import os
import re
import shutil

path = r"C:\Users\megumism\Desktop\ryza-MOD"
mod_path = r"Data\x64\character"
backup_path = r"Data_备份\x64\character"

for f in os.listdir(path):
    f_dir = os.path.join(path, f)
    # 找到MOD目录下面的各类MOD文件夹
    if os.path.isdir(f_dir) and re.match(r"pc0", f):
        mod_file_dir = os.path.join(path, f, mod_path)
        mod_num = os.listdir(mod_file_dir)[0]
        mod_file_dir = os.path.join(mod_file_dir, mod_num)
        gz_flag = False
        # 看看MOD文件夹下面有没有.gz文件
        for mod in os.listdir(mod_file_dir):
            if os.path.splitext(mod)[1] == ".gz":
                gz_flag = True
        # 没有的话去备份文件夹里面贴一个过来
        if not gz_flag:
            backup_file_dir = os.path.join(path, backup_path, mod_num)
            for backup in os.listdir(backup_file_dir):
                if os.path.splitext(backup)[1] == ".gz":
                    backup_file = os.path.join(backup_file_dir,backup)
                    lack_file = os.path.join(mod_file_dir,backup)
                    shutil.copyfile(backup_file,lack_file)

遍历并统计文件夹

这个脚本旨在统计Onedrive文件夹及其子文件夹当中的文件总数,因为文件太多了Onedrive同步相当的折磨人,找出文件数多而不常用的将他打包起来,降低文件总数。

os.walk太暴力了,关键是他全部列出来,很难区分层次。也可能是我还没有用明白吧,listdir作为温和一点的策略如下:

import os

onedrive_path = "E:\OneDrive - sjtu.edu.cn"


def countfile(path, show_depth=0):
    filenum = 0
    for dir in os.listdir(path):
        subpath = os.path.join(path, dir)
        if os.path.isdir(subpath):
            filenum += countfile(subpath, show_depth - 1)
        else:
            filenum += 1
    if show_depth >= 0:
        print(f"{path}:{filenum}")
    return filenum


countfile(onedrive_path, show_depth=1)

批量改名

这个脚本旨在适应绿联云的剧集命名系统,将话数挪到文件名的最后,方便绿联云识别排列剧集。

import os
import re

movie_path = "E:\Downloads\BitCometDownload\[DMG] 冴えない彼女の育てかた♭ [BDRip][720P][CHS][MP4]"

for f in os.listdir(movie_path):
    n = re.findall(r"「.*」",f)[0]
    s = re.findall(r"(?<=第)\d*(?=話)",f)[0]
    newname = n +" - "+ s + ".mp4"
    os.rename(os.path.join(movie_path,f),os.path.join(movie_path,newname))
    print(newname)