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

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

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

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

Q&A

解決済

3回答

792閲覧

ファイルのstr型のint型への変換に関するエラーに関して

1mzmk

総合スコア43

Python 3.x

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

0グッド

0クリップ

投稿2021/07/08 04:53

前提・実現したいこと

"input/q_exp_202004.txt"というファイルのデータを読み込んでint型に変換しようとした際にエラーが出ました。
エラー文を見る限り、10進数変換できないというような解釈です

ちなみに
input/q_exp_202004.txt"というファイルの中身は下のようになっています。
イメージ説明

read()関数で読み込むとstr型として出力されるにも関わらず、int型への変換が不可能なのでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ ValueError: invalid literal for int() with base 10: '6806\n9946\n1398\n3197\n4213\n3493\n1151\n1406\n3796\n841\n8664\n9301\n9370\n503\n4913\n1111\n5953\n428\n8150\n4386\n2569\n1654\n5021\n548\n9495\n5453\n2690\n5207\n5892\n8691'

該当のソースコード

ソースコード f = open("input/q_exp_202004.txt", "r", encoding="utf-8") r = f.read() f.close() print(type(r)) print(r) r = int(r)

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

改行(\n)を含むファイルを文字列として読み込んだ後、それをそのままint型に変換しようとしているのが原因です。
文字列を改行ごとに分割する場合はsplitlines()が使用できます。

以下で、ファイル内の各数値をintに変換可能です。

python

1f = open("input/q_exp_202004.txt", "r", encoding="utf-8") 2r = f.read() 3f.close() 4 5# 改行ごとにファイル内の文字列を分割 6l = r.splitlines() 7 8# 文字列になっている各数値をintに変換 9l = [int(i) for i in l] 10 11print(l)

投稿2021/07/08 05:42

nnkkmto

総合スコア175

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

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

0

ベストアンサー

str型ではありますが、すべての文字を一つの変数の中に入れてしまっているため、数字でない部分も含んでしまって変換できなくなっています。
split()で分割するといいと思います。

参考

投稿2021/07/08 05:03

編集2021/07/08 05:05
szx

総合スコア36

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

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

1mzmk

2021/07/08 05:57

ご回答ありがとうございます。 ということは、split()を使うなどしてリストに変換して、for文などを用いてfor文の処理の中でint()を用いれば、int型として抽出できるという解釈でよろしいでしょうか?
1mzmk

2021/07/08 05:59

f = open("input/q_exp_202004.txt", "r", encoding="utf-8") r = f.read() .split() #もしくはf.readlines() f.close() for i in r: print(int(i))
szx

2021/07/08 06:17

そうなりますね。リストから一つずつ処理することになりますが、それでできるはずです。
guest

0

エラーメッセージのとおりです。改行の挟まった長い長い文字列を、そのままintに投げ込んでも処理できません。

投稿2021/07/08 04:57

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問