2014-10-24 2 views
0

Допустим, у меня есть текстовый файл, содержащий строку с двойной обратной косой чертой. Например,Python: строки Unicode и последовательности Escape

... 
3\\/4 
... 

Когда я открываю этот файл в Python и попытаться обработать строки, я получаю следующий вопрос:

f = open("example.txt") 
for line in f: 
    print(line) 

#prints "3\/4" instead of "3\\/4"!! 

Так что я думаю, когда Юникод преобразуется в Строка Python, двойные обратные косые черты экранируются до одной косой черты ... Как это предотвратить?

Я знаю, когда я создаю строку, я могу сделать что-то вроде этого:

x = r"3\\/4" 

Но я не знаю, как я могу это сделать для строки переменной ("линия " в этом случае)?

Благодаря

+1

Я получаю '3 \\/4', что именно ожидается. Вы уверены, что ваш файл содержит двойную обратную косую черту? – Matthias

ответ

2

Вы должны использовать сырые строки нотацию Python, добавив r а ..

>>> uni = ur"a\\/b" 
>>> print(uni) 
a\\/b 
+0

Извините, я изменил свой вопрос. Ваш ответ работает, но у меня немного другая ситуация. Пожалуйста, прочитайте мой отредактированный вопрос. благодаря! – user3878106

+3

Строковый литерал используется только для создания строковых значений. Вы не можете превратить существующую строку «raw». – hwnd

1

Если файл содержит, что содержание, это то, что будет печатать. Нет проблем.

c:\>type x.txt 
3\\/4 
c:\>py 
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> with open('x.txt') as f: 
... for line in f: 
... print(line) 
... 
3\\/4 
0

Использование print(repr(line)) вместо print(line). Надеюсь, это поможет:

>>> a='\\anc' 
>>> print(a) 
\anc 
>>> print(repr(a)) 
'\\anc' 
Смежные вопросы