Как определить путь к папке, для которой я запустил скрипт? - PullRequest
1 голос
/ 03 мая 2020

приведенный ниже скрипт должен распаковать zip-файл и переименовать вырванные имена субтитров в соответствии с именами эпизодов сериала. а затем конвертировать их в UTF-8.

вот проблема:

Я хочу запустить этот скрипт в linux ОС и внутри любой папки ТВ-шоу, которую я хочу.
, но я хочу путь в fixing function будет обнаружено из папки, для которой я запускаю сценарий python, потому что это не постоянный путь, есть много папок телешоу.

извините за мой английский sh


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')

1 Ответ

1 голос
/ 03 мая 2020

функция для получения текущего рабочего каталога

os.getcwd()

для вызова этой функции вам необходимо импортировать модуль os

import os
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...