アプリ版:「スタンプのみでお礼する」機能のリリースについて

pythonについてです。
ファイルから辞書を作成するプログラムを組み込みましたが、うまくいきません。indexerrorというエラーメッセージが出てしまいます。
修正箇所をご指摘していただきたいと思います。


def read2dic(p,d):
・with open(p,"r") as f:
・・for l in f:
・・・s=l.replace("\n","").split("")
・・・d[s[0]]=int(s[1])

a={}
b={}
read2dic("test1.txt",a)
read2dic("test2.txt",b)
bkeys=b.keys()
for k,v in a.items():
・if k in bkeys:
・・bv=b[k]
・・del b[k]
・・a[k]=(v+bv)*4
・else:
・・a[k]=v*2

for k,v in b.items():
・a[k]=v*10

print(a)

A 回答 (3件)

質問意図とは関係ないかもしれませんが、下記のYouTubeチャンネルでPythonについて、基礎から応用まで解説してますので、是非ご覧ください



https://www.youtube.com/channel/UCXst4GwyI8yI8V8 …
    • good
    • 0

split の引数は " " なのかな?



ならば、テキストが
a 1
b 2
とか、空白区切りになっていれば
動くはず。空白区切りが無かったり
'空行が有れば当然落ちる。

いずれにしても、エラーメッセージを全て付けて質問するのが
マナーですよ。
    • good
    • 0

まず、エラーメッセージの読み方を覚えましょう。



エラーメッセージって、こんな風になってませんか?
Traceback (most recent call last):
File "????", line ??, in ?????
File "????", line ??, in ?????
File "????", line ??, in ?????
IndexError: list index out of range

これはトレースバックといって、エラーが発生した箇所がどのような順番で呼ばれたかが書いてあります。
FIle "????", line ?? でどのファイルの何行目かがわかります。

IndexErrorも、その後に簡単は説明があるはずです。
通常は、タプルやリストの添字(index)を指定したときに、その添字が基底の範囲を越えた(要素の数より大きいなど)で発生します。

そうして見ると、添字を使っているのは
d[s[0]]=int(s[1])
ここの s くらいです。
上記メッセージのファイル、行番号もここを指してませんか?

s=l.replace("\n","").split("")
で分割していますが、例えばファイルに空行(改行だけの行)があったりすると、splitできずに、s[1]が存在しないことになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!