Нет, к сожалению, и если бы Вы думаете об этом, та информация была бы бесполезна так или иначе, так как файл мог бы стать заблокированным очень в следующую секунду (чтение: короткий промежуток).
, Почему конкретно необходимо знать, заблокирован ли файл так или иначе? Знание, которое могло бы дать нам некоторый другой способ дать Вам хороший совет.
, Если Ваш код был бы похож на это:
if not locked then
open and update file
Тогда между этими двумя строками, другой процесс мог легко заблокировать файл, дав Вам ту же проблему, которой Вы старались избегать для начала: исключения.
Попробуйте print line.decode ('iso-8859-1'). Encode ('ascii', 'ignore')
- это должно быть намного ближе к тому, что вы хотите.
Вы хотите обрабатывать строку
как данные в кодировке ASCII, поэтому ответ - декодировать ее в текст с помощью кодека ascii:
line.decode (' ascii ')
Это вызовет ошибки для данных, которые на самом деле не закодированы в ASCII. Вот как игнорировать эти ошибки:
line.decode ('ascii', 'ignore')
.
Это дает вам текст в форме экземпляра unicode
. Если вы предпочитаете работать с данными (в кодировке ascii), а не с текстом, вы можете перекодировать их, чтобы получить обратно экземпляр str
или bytes
(в зависимости от вашей версии Python) :
line.decode ('ascii', 'ignore'). Encode ('ascii')
Чтобы удалить символы, отличные от 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)
При чтении из файла в Python вы получаете байтовые строки, также известные как «str» в Python 2.x и ранее. Вам необходимо преобразовать их в тип «unicode», используя метод decode
. например:
line = line.decode('latin1')
Замените "latin1" правильной кодировкой.