проблема с открытием текстового документа - ошибка юникода - PullRequest
2 голосов
/ 22 апреля 2009

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

import sys
try:
 d = open("p0901aus.txt" , "W")
except:
 print("Unsucessfull")
 sys.exit(0)

Я либо получаю новость, что мне не удалось открыть документ, либо появляется всплывающее окно с сообщением:

(unicode eror) Кодек unicodeescape не может декодировать байты в позиции 2-4: усеченный \ UXXXXXXXX escape

Понятия не имею, в чем проблема. я пытался сохранить документ в разных кодах, пробовал другой путь ... всегда одна и та же проблема

кто-нибудь знает какую-нибудь помощь?

Большое спасибо заранее,

Georg PS: я использую Windows Vista

Ответы [ 3 ]

5 голосов
/ 22 апреля 2009

(unicode eror) Кодек unicodeescape не может декодировать байты в позиции 2-4: усеченный \ UXXXXXXXX escape

Это, вероятно, означает, что файл, который вы пытаетесь прочитать, находится не в той кодировке, которую ожидает open (). Очевидно, open () ожидает некоторую кодировку Unicode (скорее всего, UTF-8 или UTF-16), но ваш файл не закодирован таким образом.

Обычно вы не должны использовать обычную open () для чтения текстовых файлов, поскольку невозможно правильно прочитать текстовый файл (если это не чистый ASCII) без указания кодировки.

Вместо этого используйте кодеки:

import codecs
fileObj = codecs.open( "someFile", "r", "utf-8" )
u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file
2 голосов
/ 04 марта 2010
import csv

data = csv.reader(open('c:\x\list.csv' ))

for row in data:

    print(row)

print('ready')

Выводит "(ошибка юникода) кодек unicodeescape 'не может декодировать байты в позиции 2-4: усеченный \ xXX escape"

Попробуйте c:\\x\\list.csv вместо c:\x\list.csv

Это код Python 3.

2 голосов
/ 22 апреля 2009

Измените это на

# for Python 2.5+
import sys
try:
   d = open("p0901aus.txt","w")
except Exception, ex:
   print "Unsuccessful."
   print ex
   sys.exit(0)

# for Python 3
import sys
import codecs
try:
  d = codecs.open("p0901aus.txt","w","utf-8")
except Exception as ex:
  print("Unsuccessful.")
  print(ex)
  sys.exit(0)

W чувствительна к регистру. Я не хочу поражать вас всем синтаксисом Python одновременно, но вам будет полезно узнать, как отобразить, какое исключение было вызвано, и это один из способов сделать это.

Кроме того, вы открываете файл для записи, а не для чтения. Это то, что вы хотели?

Если уже существует документ с именем p0901aus.txt и вы хотите его прочитать, сделайте следующее:

#for Python 2.5+
import sys
try:
   d = open("p0901aus.txt","r")
   print "Awesome, I opened p0901aus.txt.  Here is what I found there:"
   for l in d:
      print l
except Exception, ex:
   print "Unsuccessful."
   print ex
   sys.exit(0)

#for Python 3+
import sys
import codecs
try:
   d = codecs.open("p0901aus.txt","r","utf-8")
   print "Awesome, I opened p0901aus.txt.  Here is what I found there:"
   for l in d:
      print(l)
except Exception, ex:
   print("Unsuccessful.")
   print(ex)
   sys.exit(0)

Конечно, вы также можете использовать кодеки в Python 2.5, и ваш код будет более качественным («правильным»), если вы это сделаете. Похоже, что Python 3 рассматривает метку порядка байтов как нечто среднее между любопытством и шумом линии, что является обломом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...