У меня есть данные в формате фиксированной ширины. Я хотел бы преобразовать в CSV/tab, разделенные на питоне, используя только символы ASCII. Я очень мало знаю о кодировках, и некоторые из символов исходного файла не являются ASCII. Я могу заменить их заполнителями достаточно легко (мне все равно, что это такое), но это бросает героя. Я попытался впоследствии заменить каждую последовательность из более чем одного заполнителя на один заполнитель, но есть ситуации, когда специальные символы встречаются последовательно.Удаление символов без символов ASCII без изменения количества символов
Я не знаю, какая кодировка используется для исходного файла, но я не удивлюсь, если он был копировать/вставить из MS Word и показывает символы, такие как ½, «и т.д.
Например, рассмотрим следующий файл test.txt, который содержит поля длины 1, 2 и 1, разделенных пробелом (в том числе задней новой линии):
1 AA A
2 BB B
3 ¾ C
4 «¾ D
5 C E
простой Python скрипт:
with open('./test.txt', 'r') as f:
for line in f:
print len(line)
выходы
7
7
8
9
7
Я попытался заменить символы обижая, но так как они читали два, это приводит к двум заполнителей вставленными. Затем я могу заменить несколько заполнителей одним заполнителем ... но затем последовательные заполнители бросают счет.
import re
r = re.compile(r'\?\?+')
with open('./test.txt', 'r') as f, \
open('./test_out1.txt', 'w') as w1, \
open('./test_out2.txt', 'w') as w2:
for line in f:
q1 = line.decode('ascii', 'replace').replace(u'\ufffd', '?')
w1.write(q1)
q2 = r.sub('?', q1)
w2.write(q2)
Результаты: test_out1.txt
1 AA A
2 BB B
3 ?? C
4 ???? D
5 C E
test2.txt
1 AA A
2 BB B
3 ? C
4 ? D
5 C E
Это, очевидно, также будут иметь проблемы, если есть когда-либо фактического '?' символ рядом с символом, отличным от ASCII в источнике.
У меня отсутствует действительно простой способ сделать это?
Заранее спасибо.
Скорее всего у вас есть * не-ASCII символы * в файле, закодированную с Codepage Windows, (например, 1252), используя 128 оставшихся позиций, доступных в 1-байтовом кодеке. –
Можете ли вы предоставить образец?Как вы заменяете символы, отличные от ASCII, какие заполнители вы используете для этого броска вашего счета? –