Как запустить файл Python для файлов с различной кодировкой символов - PullRequest
0 голосов
/ 06 апреля 2020

Итак, у меня есть файлы с разными кодировками. И я делаю find *.srt -type f -exec python3 ../file.py {} \;, чтобы запустить мой код для этих файлов.

Поскольку эти файлы имеют разную кодировку, мой код не работает. У меня просто слишком много файлов. Как я могу запустить свой код для каждого файла без каких-либо ошибок. Когда я запускаю свой код сейчас, кодеки не могут открыть эти файлы или просто назначают неправильный символ.

AmericanDreamsS01E17_en.srt:                        Little-endian UTF-16 Unicode text, with CRLF line terminators
The_Last_Mimzy_en.srt:                              Non-ISO extended-ASCII text, with CRLF line terminators
Everybody_Hates_Chris_S04_E06_en.srt:               ISO-8859 text, with CRLF line terminators
Blackish_S01_E24_en.srt:                            OS/2 REXX batch file, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Coyote_Ugly_en.srt:                                 Non-ISO extended-ASCII text, with CRLF line terminators
Coyote_Ugly_en.txt:                                 UTF-8 Unicode text, with very long lines, with no line terminators
Crash_en.srt:                                       UTF-8 Unicode (with BOM) text, with CRLF line terminators.
Weeds_S02E12_en.srt:                                C++ source, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Weeds_S02E12_en.txt:                                UTF-8 Unicode text, with very long lines
WeWereSoldiers_en.srt:                              ASCII text, with CRLF line terminators
WeWereSoldiers_en.txt:                              UTF-8 Unicode text, with very long lines, with no line terminators
Without_A_Paddle_en.srt:                            UTF-8 Unicode (with BOM) text, with CRLF line terminators

мой код ниже

import sys
import re
import string
import codecs

def del_brackets(s):
        a = re.compile(r'\<.*?\>')
        result = a.sub('', s)
        return result.strip('\n').strip()

with codecs.open(sys.argv[1], 'rb', encoding="utf-8") as f:
    lines = f.readlines()

outfile = codecs.open(sys.argv[1].replace('.srt', '.txt'), 'w')

exclude = set('♪"#$%&\()*+-/:<=>@[\\]^_`{|}')
for line in lines:
#   print(repr(line))
    line = line.strip()
    #line = unicode(line.strip('\n'), 'utf-8')
    if len(line.strip()) != 0 and line != 1 and line != "1":
        if (not line.isdigit()) and ('-->' not in line):
            line = del_brackets(line)
            line = ' '.join(''.join(' ' if ch in exclude else ch for ch in line).split())
            line = re.sub(r'\.\.\.', ' ', line)
            outfile.write(line.lstrip() + "\n")

outfile.close()

Таким образом, каждый файл содержит что-то выглядит как следующее.

1
00:00:17,284 --> 00:00:19,418
Bravo!

2
00:00:19,486 --> 00:00:22,388
Bravo, Manny,
bravo!

3
00:00:22,456 --> 00:00:24,023
Well, when I heard
Manny wanted to fence,

и правильный вывод должен выглядеть так:

Bravo!
Bravo, Manny,
bravo!
Well, when I heard
Manny wanted to fence,

Но некоторые файлы содержат странные символы, и я продолжаю получать

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 797: invalid continuation byte
...