web-dev-qa-db-ja.com

"Unicode Error" unicodeescape "コーデックはバイトをデコードできません... Python 3でテキストファイルを開くことができません

私はWindows 7のマシン上で、Python 3.1を使用しています。ロシア語がデフォルトのシステム言語で、utf-8がデフォルトのエンコーディングです。

前の質問 に対する答えを見てみると、私は「コーデック」モジュールを使用してちょっとした運を得ようとしています。いくつか例を挙げましょう。

>>> g = codecs.open("C:\Users\Eric\Desktop\beeline.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#39>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#40>, line 1)
>>> g = codecs.open("C:\Python31\Notes.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 11-12: malformed \N character escape (<pyshell#41>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#44>, line 1)

私の最後のアイデアは、windowsが "users"フォルダのようないくつかのフォルダをロシア語に "翻訳する"ということであると思いました( "users"とタイプしても正しいパスですが)。 Python31フォルダそれでも、運はありません。何か案は?

184
Eric

問題は文字列にあります

"C:\Users\Eric\Desktop\beeline.txt"

ここで、\Uは、 '\ U00014321`のように、8文字のUnicodeエスケープを開始します。あなたのコードでは、エスケープの後に文字 's'が続きますが、これは無効です。

すべてのバックスラッシュを複製するか、文字列の先頭にrを付ける必要があります(生の文字列を生成するため)。

392

デフォルトのユーザディレクトリはC:\user\<your_user>なので、Windowsの典型的なエラーです。このパスをPython関数の文字列パラメータとして使用したい場合、\uがUnicodeエスケープであるという理由だけでUnicodeエラーが発生します。これ以降の数字以外の文字はエラーになります。

それを解決するには、バックスラッシュを2倍にするだけです:C:\\user\\<\your_user>...

20
Julio Cesar

接頭辞 'r'は非常にうまく機能しますが、正しい構文にする必要があります。例えば:

passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''')

ここで\\ [二重円記号]は必要ありません - 読みやすさを維持し、うまく機能します。

17
Fiddy Bux

Python 3では、私はこの問題を抱えていました:

 self.path = 'T:\PythonScripts\Projects\Utilities'

このエラーが発生しました:

 self.path = 'T:\PythonScripts\Projects\Utilities'
            ^
 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
 position 25-26: truncated \UXXXXXXXX escape

うまくいった修正は:

 self.path = r'T:\PythonScripts\Projects\Utilities'

'\ U'がエラーを生成していて、文字列の前の 'r'が(生の文字列に対して)失敗した8文字のUnicodeエスケープをオフにしているようです。 (これはちょっと過度に単純化したものですが、Unicodeを気にしなくてもうまくいきます)

これが誰かに役立つことを願っています

4
Matthew Cox

または、パス内の「\」を「/」に置き換えることもできます。

2

Openpyxlのドキュメントを参照して、以下のように変更することができます。

from openpyxl import Workbook
from openpyxl.drawing.image import Image

wb = Workbook()
ws = wb.active
ws['A1'] = 'Insert a xxx.PNG'
# Reload an image
img = Image(**r**'x:\xxx\xxx\xxx.png')
# Insert to worksheet and anchor next to cells
ws.add_image(img, 'A2')
wb.save(**r**'x:\xxx\xxx.xlsx')
2
Deepika Anand

私はPython 3.2でこれと同じエラーがありました。

メール送信用のスクリプトがあります。

csv.reader(open('work_dir\uslugi1.csv', newline='', encoding='utf-8'))

ファイルuslugi1.csvの最初の文字を削除するとうまくいきます。

1
user2859901
 path = pd.read_csv(** 'C:\ Users\mravi\Desktop\filename' **)

エラーは記載されているパスが原因です。

パスの前に 'r'を追加

 path = pd.read_csv(** r'C:\ Users\mravi\Desktop\filename '**)

これはうまくいきます。

0

私は同じエラーがありました、ちょうどnumpyパッケージをアンインストールして、そして再びインストールしました、それは働きました!

私はこのエラーがありました。私は他の2番目のpythonスクリプトから関数を呼び出すメインのpythonスクリプトを持っています。最初のスクリプトの終わりに、''' '''で指定されたコメントブロックがありました。このコメント付きコードブロックのため、このエラーが発生しました。私はそれがエラーであることを確認するために見つけたら、エラーを複数回繰り返しました。その理由はまだわかりません。

0
PCSailor