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

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

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

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

Q&A

2回答

4233閲覧

pythonでのreadとreadlinesの書き換え

milco

総合スコア20

Python

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

1グッド

1クリップ

投稿2016/01/29 04:12

pythonにてあるテキストファイルを読み込む場合,readとreadlinesでどう書き換えればいいかわからず困っております.
テキストファイル例として

0.343
0.123
0.003



などといった各行に数値が並んだファイルに対して処理を行いたい場合
f=open("data.txt",'r')
data = f.read()
data2 = eval(data) #python内でファイル内の数値が文字列として読み込まれてしまうのを修正
_function(data2)

といった記述で処理を行うのですが,
data = f.read()をdata = f.readlines()に変更した場合,同様の処理を行うことは可能でしょうか?

f=open("data.txt",'r')
data = f.readlines()
for line in data:
line2 = eval(line)
_function(line2)

このように書くと当然なのですが数値データ全体でなく1行1行の数値に対して処理が行われてしまいます.
radlinesによって1行ずつevalを行い,最後に数値全体に対して処理を行うにはどうすればよいでしょうか?
dataから1行ずつ抜き出しevalを行い,再びdata2に1行ずつ並べてゆき,最後にdata2に対して処理ができれば良いなと考えているのですが,上手いやり方がわからず困っております.

ご教授よろしくお願いします.

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

セキュリティの関係・速度の関係などの理由から eval の利用は極力避けたほうが無難です。

python

1# なんか適当な処理 2def _function(x): 3 return x * 2 4 5# with を使うと f.close() を自動で読んでくれます 6with open('data.txt', 'r') as f: 7 # map(fn, list) を使うと list の各要素に対して fn を適用してくれます 8 # 返り値は Python 2 では list, Python 3 では generator です 9 # lambda x: ... は無名関数です 10 result = map(lambda x: _function(float(x)), f.readlines()) 11 12# Python 3 の場合返り値が generator なので使う直前に明示的に list 化します 13print(list(result))

という感じにすると Pythonista っぽいです

投稿2016/02/10 11:46

Alisue

総合スコア103

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

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

0

python

1data2=[float(l.rstrip()) for l in f.readlines()]

とすると、各行の数字が要素となったリストが作成できますが、いかがでしょうか?

投稿2016/01/29 04:31

編集2016/01/29 04:34
hiro-k

総合スコア902

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問