質問するログイン新規登録

Q&A

解決済

2回答

932閲覧

Pythonで「データを辞書型に保存する」コードでエラーが出て実行できない

sanchunaka

総合スコア36

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2026/04/10 00:24

編集2026/04/10 21:46

0

1

実現したいこと

student.csvに保存されているデータをファイル全てを読み込んで、
一行ごとのデータを、名前をキーに、スコアを値にもつ辞書型として保存したい。
カンマで[name, score]となるリストに区切る。
以下のような一行結果を得たい

python3 main.py

{'Smith': 60, 'Johnson': 100, 'William': 80, 'Jones': 65, 'Brown': 30, 'Davis': 20, 'Miller': 90, 'Willson': 70, 'Moore': 60, 'Taylor': 100, 'Mary': 80, 'Patricia': 80, 'Linda': 70, 'Barbara': 90, 'Elizabeth': 10, 'Jennipher': 50, 'Maria': 35, 'Margaret': 55, 'Dorothy': 40, 'Lisa': 70}

一行ごとのデータを、名前をキーに、スコアを値にもつ辞書型に保存する

発生している問題・分からないこと

score = int(line[1])
~~~~^^^
IndexError: list index out of range

エラーメッセージ

error

1PS C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 2練習問題\3. データを辞書型に保存する> python3 main.py 3Traceback (most recent call last): 4 File "C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 練習問題\3. データを辞書型に保存する\main.py", line 31, in <module> score = int(line[1]) 5 ~~~~^^^ 6IndexError: list index out of range 7PS C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 練習問題\3. データを辞書型に保存する> 8

該当のソースコード

main.py

1with open('student.csv', 'r') as f: 2 student = {} 3 # ファイル全てを読み込む 4 data = f.readlines() 5 for line in data: 6 # カンマで[name, score]となるリストに区切る 7 line = line.strip().split(",") 8 name = line[0] 9 score = int(line[1]) 10 student[name] = score 11 print(student)

student.csv

1Smith,60 2Johnson,100 3William,80 4Jones,65 5Brown,30 6Davis,20 7Miller,90 8Willson,70 9Moore,60 10Taylor,100 11Mary,80 12Patricia,80 13Linda,70 14Barbara,90 15Elizabeth,10 16Jennipher,50 17Maria,35 18Margaret,55 19Dorothy,40 20Lisa,70 21

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

コードの書き間違いがないか丁寧に見直したが間違はないみたいです。
score = int(line[1])
~~~~^^^
IndexError: list index out of range
の見直し方が全く分かりません。
ネット検索、でも解決できませんでした。

補足

CODEPREPの Pythonで勉強中です。
https://codeprep.jp/books/71/chapters/6/sections/3
windows10, vscode,使用しています。必要な拡張機能は入っているとおもいます。

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

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

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

melian

2026/04/10 01:04

student.csv の内容が main.py と同じになっていますので修正をお願いします。
sanchunaka

2026/04/10 02:26

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
melian

2026/04/10 02:44

student.csv の15行目が名前(Elizabeth)だけになっています。この行にスコアを追加してください。
sanchunaka

2026/04/10 02:59

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
melian

2026/04/10 03:00

おそらく、その修正でエラーは発生しない様になったかと思います。
tmp

2026/04/10 03:02

student.csvの21行目の空白行は、存在するの?
sanchunaka

2026/04/10 03:08

はい、CODEPREPのコードは21行まで出ています。
tmp

2026/04/10 03:38

貼り付けたら動きましたよ PCのstudent.csvは、21行目に、なにもはいっていませんか?空白とかタブとか
sanchunaka

2026/04/10 03:47

ありがとうございます。 すみません、具体的にコードと、手順をご教授願えませんでしょうか。 score = int(line[1]) ~~~~^^^ IndexError: list index out of range のエラーが出て先に進むことができません。
melian

2026/04/10 04:13

質問文のソースコード(HTML)を見ると、student.csvの最後に改行コード(0x0a)が入っています。(最終行が空行になっています) student.csvの右上に表示されている ⊞ をクリックしてクリップボードにコピーすると、この空行が自動的に除去されますので、そちらにあるstudent.csvを適当な名前にリネームして新たにstudent.csvを作成してから、先程のクリップボードの内容(最終行の空行が削除されている状態)をペーストして保存してください。
hiroki-o

2026/04/10 10:59

sanchunakaさん 提示されているソースは問題無いです。以下の2点を確認してください。 ・TakaiYさんの回答の通りにprint文を入れて、CSVの何行目でエラーになっているか ・Visual Studio Codeで編集しているソースと、実際に動かしているソースやCSVが一致しているか
jimbe

2026/04/10 18:21

質問者さんが提出されている情報になにか勘違いが含まれているようですね。 コードやCSVファイルの中身とフルパス名、エラーが表示されている状態のスクリーンショットを載せて戴くと、質問者さんの『これは合っているはず』というフィルターを通さずにこちらで確認できるので、例えば「良く見たらフォルダ名少し違いません?」とか見つけ易いと思いますが、如何でしょう。
sanchunaka

2026/04/10 21:31

ありがとうございます。きょうも頑張ってみます。
sanchunaka

2026/04/10 21:38

コメントありがとうございます。コードのコメントなどを削除して試したところ問題が解決しました!
hiroki-o

2026/04/11 00:33

空白も含めて最初に提示されたソースで問題無いです。 おそらく別の原因です。
jimbe

2026/04/12 16:39 編集

質問にご提示されたコードと、エラーの出ていたお手元のコードは、『一語一句全く同じ』では無かったということですね。
guest

回答2

0

ベストアンサー

うん。何も問題なく実行出来るな。

Python

1Python 3.12.3 (main, Mar 3 2026, 12:15:18) [GCC 13.3.0] on linux 2Type "help", "copyright", "credits" or "license()" for more information. 3>>> 4============ RESTART: /home/sun/projects/teratail/sanchunaka/main.py =========== 5{'Smith': 60, 'Johnson': 100, 'William': 80, 'Jones': 65, 'Brown': 30, 'Davis': 20, 'Miller': 90, 'Willson': 70, 'Moore': 60, 'Taylor': 100, 'Mary': 80, 'Patricia': 80, 'Linda': 70, 'Barbara': 90, 'Elizabeth': 10, 'Jennipher': 50, 'Maria': 35, 'Margaret': 55, 'Dorothy': 40, 'Lisa': 70} 6

そもそも、コードが14行しかないのに

PowerShell

1PS C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 2練習問題\3. データを辞書型に保存する> python3 main.py 3Traceback (most recent call last): 4 File "C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 練習問題\3. データを辞書型に保存する\main.py", line 31, in <module> score = int(line[1]) 5 ~~~~^^^ 6IndexError: list index out of range 7PS C:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 練習問題\3. データを辞書型に保存する>

31行目にエラーを見つけた、ってのはおかしいんだ。特になんかmoduleインポートしてるわけじゃないのに。

結局、なんかのコピペミス?とかでソース本体の下部の、スクロールしなきゃ見えない辺りにゴミがペーストされてる、とか考えるしかないんだけど?
果たして。

main.py

student.csv

IDLE Shell

投稿2026/04/10 04:26

編集2026/04/10 04:34
cametan

総合スコア308

sanchunaka

2026/04/10 07:33

ご教授していただいたことを参考にして フォルダを新しく作成して、main.py、student.csvも作りなおして、 vscodeでpython3 main.pyを実行してもエラーになります。 コマンドプロンプトでC:\Users\0hc49\Documents\CODEPREP\Python\2.Python基礎 データ操作編\❻ 練習問題\3-1>python3 main.py でもおなじ結果になりました。 すこし休んでから再挑戦したいと思います。 ありがとうございました。
melian

2026/04/10 08:58

> sanchunakaさん CSVファイルのリンターでstudent.csvファイルを検査してみてはどうでしょうか。 CSV Lint https://csvlint.io/ 右側の "Upload CSV File" ボタンをクリックしてstudent.csvファイルをアップロード、次に"Validate CSV"ボタンをクリックします。
cametan

2026/04/10 10:19

> sanchunakaさん 何がおかしいんだろうねぇ。不思議だ。 一回同じファイルと、今度はPython付属のIDLEで開いてやってみて。 全部同じなのに、そっちでエラーです、ってぇのなら、考えづらいけどVisual Studio Codeが悪さしてる、って事もあるのかねぇ。
sanchunaka

2026/04/10 14:09

今日は、ネット検索実行でクタクタです。 だれか助けて!ください。
cametan

2026/04/10 15:11

> sanchunakaさん 何を「助けて」っつってんだか分からんが。 IDLE知らないのかい? IDLE: https://docs.python.org/ja/3.14/library/idle.html まぁ、知らなくてもあなたの責任じゃあない。 ハッキリ言っておくけど、経験上、オールインワンの筈のPythonを使ったプログラミング初学者向けを謳ってる本ないしはサイトで、プログラミング初学者にVisual Studio Codeの導入を勧めるブツは100%クソだ。 従って、どこだっけ?CODEPREPだっけ?100%クソサイトだよ。 事実、「プログラミング教育」を本当にキチンとやってるなら、貴方はここに現われていない。なぜなら「受講生の質問受け付けて当然」だからだ。受け付けてないから他サイトで質問するしかないわけでしょ? Visual Studio Codeを薦める奴らって絶対薦めた責任は取らないのね。だからマトモに受け取った貴方みたいな真面目な人は自分を責めて他のQ&Aサイトに行かざるを得ないわけだ。 経験上、Pythonに於いて、 ・ 初学者にVisual Studio Codeを薦める ・ 初学者にGoogle Colabを薦める 奴らは100%クソだ。繰り返すが、Pythonはオールインワンなんで、他に何も要らないんだ。 2000年代〜2015年くらいまではPythonの本とか、サイトとかでもキチンとPython本体に含まれるIDLE使わせてたんだよ。ただ、それ以降、ニワカが増えてVisual Studio Codeを「無駄なのに」わざわざ導入させようとするトンチキが増えたんだ。 断っておくけど、Visual Studio Codeは(重いけど)悪いIDEではない。反面、「使いこなす」には時間がかかるんだよ。別にVisual Studio Codeに限った話じゃないんだけど、IDEは習熟するのに時間がかかる。で、この手の本とかサイトって「導入しろ」って言うだけで「色んな使い方の説明」とかしてないだろ? んで、Visual Studio Codeの使い方を「真面目に学ぶ」と、Pythonの学習なんてやってる暇がなくなるんだ(笑)。 じゃあ、何のために導入するのか、っつーと「全く意味がない」ってのが答えになる。 大体、Visual Studio Code上で実行して「上手く行かない」ってなってる時、「IDLEでやってご覧」って言われて、Python使ってる筈なのに「IDLEを知らない」ってのはおかしいんだよ。繰り返すが貴方のせいじゃない。 そのCODEPREPのせいだ。何も教育を施してない、に等しい。 万死に価する、って思うね。 あるいはVSCodeを離れて、古き良きDOS窓上でそのコードを実行してみてどうなるか見てみるのもよい。 でも「DOS窓で」って言われて「やり方が分からん」となれば、やっぱり「CODEPREPは何も有益な事を教えてない」って事なんだよ。 貴方のせいじゃない。 けど、学習の最初の場所を間違えた、ってのが事実だろうねぇ。残念だけど。
sanchunaka

2026/04/10 21:54

刺激的なご指導ありがとうございます。 このコーナーはいつも素晴らしい。 だいぶ勉強させて頂き利用することも少なくなりましtが助かりました。
guest

0

コメントついているように、student.csvの内容がどのようになっているかわからないので問題そのものの回答にはなりませんが、いくつかアドバイスします。

  1. デバグする
    デバグの基本の1つは途中の変数の内容を把握することです。いろいろな方法がありますが、お手軽なのはprint関数を埋め込む方法です。今回の問題は「配列の範囲外にアクセス(IndexError: list index out of range)」で対象のリストはlineなので、lineを生成した後にprintを仕込んで内容を見てみるといいでしょう。
    これで、何が起きているのかわかれば、対処の方法もわかるでしょう。

python

1 # カンマで[name, score]となるリストに区切る 2 line = line.strip().split(",") 3 print(f"line:{line}") 4 name = line[0]
  1. csvモジュールを使う
    pythonの標準モジュールにcsvモジュールがあり、csvファイルが扱いやすくなるので、使うのを検討してみるといいでしょう。ただし、今回のような問題の解決にはなりそうもありませんが。

投稿2026/04/10 02:29

TakaiY

総合スコア14696

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問