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

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

新規登録して質問してみよう
ただいま回答率
85.37%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

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

Q&A

解決済

2回答

2902閲覧

readline()[int型の変数] int型の変数を文字列としてではなく、数字として認識させたい

fdorike

総合スコア21

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

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

0グッド

0クリップ

投稿2021/08/23 10:33

前提・実現したいこと

 with open()で開いたファイルをreadline()で1行ずつ読み込む際に、特定の行だけを読み込みたいです。

 readline()[数字] カッコの中に数字を入力すれば、特定の行を読み込むことは知っていますが、int型の変数を入力すると、 「発生している問題・エラーメッセージ」に記載したErrorがでてしまいます。

 int型の変数をstringとしてではなく、数字として認識させるにはどうしたら良いでしょうか?

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

line = f.readline()[lineCount]

IndexError: string index out of range

### 該当のソースコード Python 一部抜粋 import re file = './Practice.txt' lineCount = 0 with open(file, 'rt', encoding='utf-8') as f: for lineCount in range(1,10): lineCount += 1 line = f.readline()[lineCount] ### 試したこと line = f.readline()[int(lineCount)] line = f.readline()[eval(linceCount)]

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

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

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

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

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

guest

回答2

0

ベストアンサー

readline()[数字] カッコの中に数字を入力すれば、特定の行を読み込むことは知っていますが、

いいえ。間違えています。
それは、readline()で読み込んだ1行の文字列に対して、数字番目の文字を表します。

IndexError: string index out of range

は、「文字列の何文字目というのが範囲外=文字列長以上の数字を指定した」です。
"abc"[4]みたいなことをしています。

おそらくは、

Python

1with open(file, 'rt', encoding='utf-8') as f: 2 lines = f.readlines() 3 for lineCount in range(1,10): 4 line = lines[lineCount+1]

みたいなことをしたかったのでしょう。

投稿2021/08/23 10:50

otn

総合スコア85762

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

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

fdorike

2021/08/23 12:33

with open(file, 'rt', encoding='utf-8') as f: lines = f.readlines() for lineCount in range(1,10): line = lines[lineCount+1] こちらのプログラムで実現したい動作を実現できました。ありがとうございます。 追加質問ですが、 for文実行後、lineCount +=2 のような処理を行いましたが、for文に戻るとlineCountに代入した値が反映されていませんでした。 lineCountに加算した状態からfor文を実行したいのですが、どのようにプログラムを書けば良いですか?
otn

2021/08/23 16:10

>for文に戻るとlineCountに代入した値が反映されていませんでした。 forはそういうものです。 > lineCountに加算した状態からfor文を実行したいのですが、 具体的にどういうことでしょう?
fdorike

2021/08/24 04:32

for lineCountの値が1 in range(1,10):#1回目の実行 lineCount += 2 for lineCountの値が3 in range(1,10):#2回目の実行 のように動作をさせたいです。
otn

2021/08/24 08:13

何をしたいのか分かりません。 for lineCount in range(1,10): だと、1,2,3,4,5,6,7,8,9と繰り返しになりますが、 1,3,5,7,9と繰り返したいと言うこと?であれば、range(1,10,2)です。
fdorike

2021/08/26 05:20

解決しました。ありがとうございます。
guest

0

line = f.readline()[lineCount]

それをやるならreadlineではなくreadlinesでは?


さらに指摘すると、f.readlines()はファイルfの中身全てを読み込んで文字列のリストを返すので、これはfに対して一度だけ行えばよく、ループで繰り返し実行するのは誤りです。

投稿2021/08/23 10:41

編集2021/08/23 10:43
itagagaki

総合スコア8402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問