2015-08-11 3 views
2

Я пишу программу, которая ищет в файле, ища признаки £:Python регулярное выражение £ к полукокса

r = re.compile(r"£\S*£") 
def parseData(self): 
    f = open(file, 'r') 
    fs = f.read() 
    res = r.findall(fs) 
    return res 

По какой-то причине, мой выход имеет символы, как £ foo £, где файл £ Foo £.

Я использую python 3.4.3, если это помогает.

Полного чтение файла http://pastebin.com/L7hjeg6A

+1

не может воспроизвести, разместить содержимое этого файла. –

+0

Не могли бы вы объяснить 'где файл £ foo £'? –

ответ

3

Вопрос заключается в том, что файл закодирован в одном формате, но вы открывающийся файл в другом формате. Скорее всего, файл utf-8, но вы открываете в каком-то формате ANSI (я видел аналогичную проблему в блокноте ++, когда я изменил кодировку с UTF-8 на ANSI, для £Latitude£). Пример, чтобы показать такое же поведение -

Моих a.txt -

£Latitude£ 

код -

>>> f = open('a.txt','r') 
>>> s = f.read() 
>>> s 
'\xc2£Latitude\xc2£' 

>>> f = open('a.txt','r',encoding='utf-8') 
>>> s = f.read() 
>>> s 
'£Latitude£' 

Вам нужно открыть файл в правильной кодировке, пропускание кодировки в качестве аргумента в open(), как сделано выше.


От documentation of open() -

кодирования это имя кодировки, используемой для декодирования или кодирования файла. Это следует использовать только в текстовом режиме. Кодировка по умолчанию зависит от платформы (независимо от того, возвращается locale.getpreferredencoding()), но можно использовать любую кодировку, поддерживаемую Python. См. Модуль кодеков для списка поддерживаемых кодировок.

+0

Несомненно, с помощью python 3 с использованием unicode и всего того, что utf-8 будет по умолчанию? –

+0

Нет, на самом деле нет, кодировка по умолчанию зависит от платформы. –

+0

Вы можете использовать 'import locale; print (locale.getpreferredencoding()) ', чтобы узнать, какова ваша кодировка по умолчанию: –

Смежные вопросы