Как удалить расширенный ASCII с помощью Python?

Нет, к сожалению, и если бы Вы думаете об этом, та информация была бы бесполезна так или иначе, так как файл мог бы стать заблокированным очень в следующую секунду (чтение: короткий промежуток).

, Почему конкретно необходимо знать, заблокирован ли файл так или иначе? Знание, которое могло бы дать нам некоторый другой способ дать Вам хороший совет.

, Если Ваш код был бы похож на это:

if not locked then
    open and update file

Тогда между этими двумя строками, другой процесс мог легко заблокировать файл, дав Вам ту же проблему, которой Вы старались избегать для начала: исключения.

5
задан Jauder Ho 6 November 2009 в 06:38
поделиться

4 ответа

Попробуйте print line.decode ('iso-8859-1'). Encode ('ascii', 'ignore') - это должно быть намного ближе к тому, что вы хотите.

5
ответ дан 13 December 2019 в 19:29
поделиться

Вы хотите обрабатывать строку как данные в кодировке ASCII, поэтому ответ - декодировать ее в текст с помощью кодека ascii:

line.decode (' ascii ')

Это вызовет ошибки для данных, которые на самом деле не закодированы в ASCII. Вот как игнорировать эти ошибки:

line.decode ('ascii', 'ignore') .

Это дает вам текст в форме экземпляра unicode . Если вы предпочитаете работать с данными (в кодировке ascii), а не с текстом, вы можете перекодировать их, чтобы получить обратно экземпляр str или bytes (в зависимости от вашей версии Python) :

line.decode ('ascii', 'ignore'). Encode ('ascii')

4
ответ дан 13 December 2019 в 19:29
поделиться

Чтобы удалить символы, отличные от ASCII, используйте line.decode (your_file_encoding) .encode ('ascii', 'ignore') . Но, вероятно, вам лучше использовать для них escape-последовательности PLM:

import re

def escape_unicode(m):
    return '\\U%04x' % ord(m.group())

non_ascii = re.compile(u'[\x80-\uFFFF]', re.U)

line = u'\\B1a\\B \\tintense, disordered and often destructive rage\u2020.\u2020.\u2020.\\t'
print non_ascii.sub(escape_unicode, line)

Это выводит \ B1a \ B \ tintense, беспорядочную и часто деструктивную ярость \ U2020. \ U2020. \ U2020. \ T .

] Удаление не-ASCII и управляющих символов с помощью регулярного выражения также легко (это можно безопасно использовать после экранирования):

regexp = re.compile('[^\x09\x0A\x0D\x20-\x7F]')
regexp.sub('', line)
2
ответ дан 13 December 2019 в 19:29
поделиться

При чтении из файла в Python вы получаете байтовые строки, также известные как «str» в Python 2.x и ранее. Вам необходимо преобразовать их в тип «unicode», используя метод decode . например:

line = line.decode('latin1')

Замените "latin1" правильной кодировкой.

0
ответ дан 13 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: