如何检测我为其运行脚本的文件夹路径?

2024-05-19 00:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的脚本是解压文件,并根据电视节目集名重命名字幕名。然后将它们转换为utf-8

问题是:

我想在linux操作系统和我想要的任何tv show文件夹中运行此脚本。
但我想从运行python脚本的文件夹中检测fixing function中的路径,因为它不是一个固定路径,有许多tv show文件夹。

对不起,我的英语不好


import zipfile
import os
import re
from chardet import detect
import fnmatch

def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, pattern):
                result.append(os.path.join(root, name))
    return result



def get_encoding_type(file):
    with open(file, 'rb') as f:
        rawdata = f.read()
    return detect(rawdata)['encoding']

def correctSubtitleEncoding(filename, newFilename, encoding_from, encoding_to='UTF-8'):
    with open(filename, 'r', encoding=encoding_from) as fr:
        with open(newFilename, 'w', encoding=encoding_to) as fw:
            for line in fr:
                fw.write(line[:-1]+'\r\n')

def fixing(path):

    oldsrtfiles = [f for f in os.listdir(path) if '.srt' in f or '.ass' in f ]
    print(len(oldsrtfiles), ' old subtitles found')
    if len(oldsrtfiles) != 0:
        for oldsrt in oldsrtfiles:
            os.remove(f'{path}{oldsrt}')
            print(f'{oldsrt} removed')

    filename = find('*.zip', path)[0]
    with zipfile.ZipFile(f'{filename}',"r") as zip_ref:
        zip_ref.extractall(path)
        print('files extarcted')

    os.remove(f'{filename}')
    print("Zip File Removed!")

    newsrtFiles = [f for f in os.listdir(path) if '.srt' in f or '.ass' in f ]
    print(len(newsrtFiles), ' subtitles found')


    showsTitles = [f for f in os.listdir(path) if '.mkv' in f or '.avi' in f or '.mp4' in f]
    print(len(showsTitles), ' tv show found')

    pattern = r'S(\d{1,2})E(\d{1,2})'

    for show in showsTitles:
        SEneeded = re.search(pattern, show).group(0)
        for i, sub in enumerate(newsrtFiles):
            if SEneeded in sub:
                if sub[-3:] == 'srt':
                    newsrtFiles[i] = show.replace(show[-3:],'ar.srt')
                    os.rename(f'{path}{sub}',f'{path}{newsrtFiles[i]}')
                elif sub[-3:] == 'ass':
                    subs[i] = show.replace(show[-3:],'ar.ass')

    forencoding = [f for f in os.listdir(path) if '.srt' in f or '.ass' in f ]
    for newsrtfile in forencoding:
        from_codec = get_encoding_type(f'{path}{newsrtfile}')
        print(from_codec)
        correctSubtitleEncoding(f'{path}{newsrtfile}', f'{path}{newsrtfile}', from_codec, encoding_to='UTF-8')

Tags: orpathinfromimportforifos

热门问题