Итак, у меня есть файлы с разными кодировками. И я делаю 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