質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

2143閲覧

python エラーになる。

R30san

総合スコア29

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/28 02:22

初歩的な質問で申し訳ございません。

pythonの勉強中に下記のエラーになって、どこが原因かわかりません。
教えて頂けないでしょうか。

◆環境
Windows 10

◆コード
import openpyxl as px
workbook=px.load_workbook('C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True)
sh_name=workbook.sheetnames
print(sh_name)

◆エラー内容
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

まず、エラーメッセージ読みましょう
それすらしないなら、この業界、向いてないです

[翻訳]あなたがプログラミングに向いていない10のサイン

エラーメッセージに答えが書いてあります。

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

訳:

シンタックスエラー(構文エラー): (ユニコードエラー) "unicodeescape"コーディックはバイト(bytes)に変換(decode)できません。 場所: 2行目 \UXXXXXXXXエスケープ切り捨て

二行目を見ると、

Python

1workbook=px.load_workbook('C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True)

となっています。

よく見ると、"C:\User\use..." という風に、バックスラッシュ(円マーク)が二個になっていたり、
一個になっていたりする。

また、Pythonはどうか知りませんが、少なくともC言語やC++,JavaScriptといった言語では、
パスの区切り文字として、バックスラッシュ(円マーク)を使う場合は、二つで一つとみなします。

つまり、"" で一つの区切り文字と認識します。

従って、

Python

1workbook=px.load_workbook('C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True)

とすれば動きます。

また、区切り文字としての円マークやバックスラッシュは「半角」です。


[追記0]

質問のコード、読みにくいです。
今回はいいですが、Pythonはインデントによって意味が変わる言語なので、とても重要です。
しかし、質問のような書き方ですと、インデントが無視されるので、
わかりにくいです。

もし、「インデントの数が合わないことが原因」だった場合、
ほとんどの人がわからない。
だって、質問にはないが、単にteratail側とかが無視した結果なのか、
そもそもインデントがないのかが不明瞭だから。

エラーメッセージがあるのである程度は妄想できますが、
読みにくいのでちゃんと書いてください。

(質問するときや解凍するときには)"<code>"というボタンがあるはずなので、それを押して、
レビュー(下のほうにある表示例)を見ながら書いていってください


[追記1]

やはり、「全角と半角を取り間違えていること」が原因な気がする...

C言語では ASCIIは charで、UNICODEは wchar_t ( Windows API ありだと WCHAR とも書けるが )という風に別物なのです。

また、このwchar_t のデータを charに入れようとすると、
「ユニコードのデータをASCIIに変更できない」云々のエラーが出た気がします。

そこから考えても、全角・半角を取り間違えていることが原因かと。

ちなみに、半角の円マークとしてteratailに入力すると、自動的にバックスラッシュに変換されるようです。

質問文ではテキストモードとは言え、そのまま円マークで表示されていることから、
「全角の円マーク」になっているのだと思う。

これを半角の円マーク( teratailではバックスラッシュ ) にすれば直る可能性がある。

投稿2019/04/28 02:52

編集2019/04/28 02:59
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

workbook=px.load_workbook('C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True)

¥¥use
となっていて、「¥u」がUnicodeエスケープシーケンスにPythonには
みえるのではないかな?(例 あ → ¥u3042)
※\を¥(半角だとバックスラッシュになるので全角)と書いてます

投稿2019/04/28 02:43

mike2mike4

総合スコア901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/04/28 03:15

> ※\を¥(半角だとバックスラッシュになるので全角)と書いてます バックスラッシュが正解ですよ。 フォントによっては円記号に見えるだけで。 パス区切りはUnix系がスラッシュなので、MSがそれを真似てバックスラッシュにしました。
mike2mike4

2019/04/28 03:26

あ、いや私はわかってます。R30sanさん向きの回答だったので、説明不足で申し訳ないです。
otn

2019/04/28 03:30

そうでしたか。説明をうまくしないと、初心者はプログラムに全角の円記号を書いちゃうんですよね。
mike2mike4

2019/04/28 03:35

いえいえ、こういうotnさん方のフォローがあると気が付かなかったところが明確になります。寝不足で頭が回らないと手を抜いた文章かいてしまうんですね、私。
BeatStar

2019/04/30 01:02

横から失礼します。 otnさん >> フォントによっては円記号に見えるだけで... そうなんですか! 初めて知りました... なるほど。
otn

2019/04/30 01:56

正確には、US-ASCIIではバックスラッシュで、JIS-X0201では円記号なのですが、現在はこの2つ(US-ASCIIと、JIS-X0201の前半分)は混用されているので、「フォントによる違い」に見えます。 UTF-8も、US-ASCIIの上位互換なのでバックスラッシュです。現在のウェブページではUTF-8が多いので、このサイトも含め、バックスラッシュで表示されるのが正しいですが、フォントを正しく指定しないと円記号に見えます。 UTF-8等のユニコードには、「フォントによっては円記号に見えるバックスラッシュ」と別の文字で、「(半角の)円記号」もありますが、Windowsのパス区切りや、プログラミングで使うエスケープ文字は、「フォントによっては円記号に見えるバックスラッシュ」の方です。 間違えて「(半角の)円記号」を使うと、見た目での区別は付かないのにエラーになります。
guest

0

自己解決

OpenOfficeで保存した.xlsxファイル自体に問題がありそうです

これをヒントに、LibreOfficeを入れてやってみたら、できました。
皆様、ありがとうございました!!

投稿2019/04/30 03:11

R30san

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この辺りを試してみてはいかがでしょうか。

open関数を使うとエラー (unicode error) が出てしまいます

具体的には、2つ方法があるようですね。

  • raw

r'C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx'

  • バックスラッシュを使う部分は2回バックスラッシュを設置する

'C:\User\use\Desktop\kindle_study\data\kindle1_miyazaki.xlsx'

この \use は誤ってバックスラッシュが二つ付いているだけだと信じます。

投稿2019/04/28 02:37

siruku6

総合スコア1382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R30san

2019/04/28 02:50

ありがとうございます。 タイプミスは失礼しました。上記もやってみたのですが、下記の通り、エラーになりました。 何が間違っているのでしょうか?? ◆コード import openpyxl as px workbook=px.load_workbook(r'C:\Users\user\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True) sh_name=workbook.sheetnames print(sh_name) ◆結果 --------------------------------------------------------------------------- BadZipFile Traceback (most recent call last) <ipython-input-15-bc60dcdda6f4> in <module> 1 import openpyxl as px ----> 2 workbook=px.load_workbook(r'C:\Users\user\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True) 3 sh_name=workbook.sheetnames 4 print(sh_name) C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in load_workbook(filename, read_only, keep_vba, data_only, keep_links) 309 """ 310 reader = ExcelReader(filename, read_only, keep_vba, --> 311 data_only, keep_links) 312 reader.read() 313 return reader.wb C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in __init__(self, fn, read_only, keep_vba, data_only, keep_links) 124 def __init__(self, fn, read_only=False, keep_vba=KEEP_VBA, 125 data_only=False, keep_links=True): --> 126 self.archive = _validate_archive(fn) 127 self.valid_files = self.archive.namelist() 128 self.read_only = read_only C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in _validate_archive(filename) 96 raise InvalidFileException(msg) 97 ---> 98 archive = ZipFile(filename, 'r') 99 return archive 100 C:\ProgramData\Anaconda3\lib\zipfile.py in __init__(self, file, mode, compression, allowZip64, compresslevel) 1220 try: 1221 if mode == 'r': -> 1222 self._RealGetContents() 1223 elif mode in ('w', 'x'): 1224 # set the modified flag so central directory gets written C:\ProgramData\Anaconda3\lib\zipfile.py in _RealGetContents(self) 1287 raise BadZipFile("File is not a zip file") 1288 if not endrec: -> 1289 raise BadZipFile("File is not a zip file") 1290 if self.debug > 1: 1291 print(endrec) BadZipFile: File is not a zip file ◆コード --------------------------------------------------------------------------- import openpyxl as px workbook=px.load_workbook('C:\Users\user\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True) sh_name=workbook.sheetnames print(sh_name) ◆結果 --------------------------------------------------------------------------- BadZipFile Traceback (most recent call last) <ipython-input-16-d5eb7ab58851> in <module> 1 import openpyxl as px ----> 2 workbook=px.load_workbook('C:\Users\user\Desktop\kindle_study\data\kindle1_miyazaki.xlsx',data_only=True) 3 sh_name=workbook.sheetnames 4 print(sh_name) C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in load_workbook(filename, read_only, keep_vba, data_only, keep_links) 309 """ 310 reader = ExcelReader(filename, read_only, keep_vba, --> 311 data_only, keep_links) 312 reader.read() 313 return reader.wb C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in __init__(self, fn, read_only, keep_vba, data_only, keep_links) 124 def __init__(self, fn, read_only=False, keep_vba=KEEP_VBA, 125 data_only=False, keep_links=True): --> 126 self.archive = _validate_archive(fn) 127 self.valid_files = self.archive.namelist() 128 self.read_only = read_only C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py in _validate_archive(filename) 96 raise InvalidFileException(msg) 97 ---> 98 archive = ZipFile(filename, 'r') 99 return archive 100 C:\ProgramData\Anaconda3\lib\zipfile.py in __init__(self, file, mode, compression, allowZip64, compresslevel) 1220 try: 1221 if mode == 'r': -> 1222 self._RealGetContents() 1223 elif mode in ('w', 'x'): 1224 # set the modified flag so central directory gets written C:\ProgramData\Anaconda3\lib\zipfile.py in _RealGetContents(self) 1287 raise BadZipFile("File is not a zip file") 1288 if not endrec: -> 1289 raise BadZipFile("File is not a zip file") 1290 if self.debug > 1: 1291 print(endrec) BadZipFile: File is not a zip file
siruku6

2019/04/28 04:34

BadZipFile: File is not a zip file というエラーメッセージがありますよね? ということなので、ファイルには辿り着けているけど、「このファイルは扱えないよ」とpythonが教えてくれています。 これは`openpyxl`の仕様なので、申し訳ないのですが私にはこたえられません。`openpyxl`は一度も使ったことがありませんので。 - - - - - - - - - - - - 少なくともソースコードには問題ないと私は考えております。 問題があるとしたらソースコード以外、たとえば開こうとしているファイルに問題がある可能性はありますね。(エラーメッセージにはそう書いてあります) - - - - - - - - - - - - BeatStarさんがおっしゃるように、エラーメッセージはありがたい情報がふんだんに書かれていることが多いです。 英語なので、私は読み解くのが少々つらいですが、頑張って読んでみると人に聞く必要がなくなることもありますので、読んでみてください。
R30san

2019/04/28 05:48

ありがとうございます。 いろいろと省いてしまったのが良くなかったです。 自分で調べてみます。。
siruku6

2019/04/28 13:51

聞くのは悪いことではないと思います。 私も「それっぽいことが書かれている記事をみつけたけど、書いてあることが理解できません教えて下さい」、みたいな質問を先輩にすることがあります。 でも、何も調べないで聞くと、相手に調べさせるだけになることもあるので、そうならないよう一緒に気を付けていきましょう...!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問