Добрый день!
После некоторого времени вычитки книг fb2 от одного переводчика выделил ряд regexp для исправления некоторых моментов. Юзать их поочередно да ещё и для каждого оставшегося файла как-то долго, поэтому написал простеньких скрипт на Python (собственно, сразу после того, как выучил некоторые основы).
Вот, что вышло:
- csetfix.sh
enconv -x UTF-8 $1
python bfix.py $1
- bfix.py
# -*- coding: utf-8 -*-
import re
import sys
if len(sys.argv) < 2:
exit(1)
reg = [
{'find':r'windows-1251', 'replace':r'utf-8'},
{'find':r'-нить', 'replace':r'-нибудь'},
{'find':r'кол-в', 'replace':r'количеств'},
{'find':r'-же', 'replace':r' же'},
{'find':r'так же', 'replace':r'также'},
{'find':r'Однако,', 'replace':r'Однако'},
{'find':r'Высочество', 'replace':r'Величество'},
{'find':r'Глава №?(\d+)\.? ', 'replace':r'Глава \1: '},
{'find':r'(?<=<body>)\s+<title>[\s\S]+?</title>', 'replace':r''},
{'find':r'– -{30,43},', 'replace':r' ================================ '},
{'find':r'<p>\s+', 'replace':r'<p>'},
{'find':r'\s+</p>', 'replace':r'</p>'},
{'find':r'<emphasis>\s+', 'replace':r'<emphasis>'},
{'find':r'\s+</emphasis>', 'replace':r'</emphasis>'},
{'find':r'</emphasis>\s*<emphasis>', 'replace':r' '},
{'find':r'<strong>\s+', 'replace':r'<strong>'},
{'find':r'\s+</strong>', 'replace':r'</strong>'},
{'find':r'</strong>\s*<strong>', 'replace':r' '},
{'find':r'<strong></strong>', 'replace':r''},
{'find':r'<emphasis></emphasis>', 'replace':r''},
{'find':r'<p></p>', 'replace':r''},
{'find':r'( –)(?= (?:(?:потому )?что(?:бы)?|если|то|а|да|и|или|однако|но) )', 'replace':r','},
{'find':r'\.</strong>', 'replace':r'</strong>'},
{'find':r':</strong>([^\s<])', 'replace':r':</strong> \1'},
{'find':r'(= </p>\s+<p><strong>)– ', 'replace':r'\1'},
{'find':r'\s+(\.|,|!|\?)', 'replace':r'\1'},
{'find':r'\n+', 'replace':r'\n'}
]
file = open(sys.argv[1], "r")
result = ""
for line in file.readlines():
result = result+line
file.close()
for i in range(0,len(reg)):
result = re.sub(reg[i]['find'], reg[i]['replace'], result)
result = re.split("\n+", result)
file2 = open(sys.argv[1], "w")
for line in result:
file2.write(line+'\n')
file2.close()
Однако при запуске
find -type f -name "*.fb2" | sort | xargs python bfix.py
изменяется только тот файл, путь к которму find выдает первым..
С чем это связано? Как решить?