パソコン日記

気づいたこと まとめてみる

Pythonでファイル処理をやってみる(数値を扱う)

Pythonでファイルから数値を読み込む

これまでに、Pythonを用いたファイル処理についていくつか紹介してきました。

1-compinfo.hatenablog.com 1-compinfo.hatenablog.com

今回は実際に数値を読み込む方法をご紹介いたします。

数値のファイルを作成

いくつか数値が書いてあるファイルが必要なので、前回の記事を参考に次のようなプログラムをつくってみました。

1-compinfo.hatenablog.com

#!python3
import random

f = open("test.txt","w")
lines = 10
for i in range(lines):
    s = str(random.random()) + " " + str(random.random()) + " " + str(random.random()) +"\n"
    f.write(s)
f.write("\n")
f.close()

これを実行すると、次のようなファイルが出力されます。改行が一つ余計にはいってしまうので消しておきましょう。

0.3053029506483719 0.49034955027588945 0.3191128539531025
0.917050789567466 0.9397034315138278 0.19792388328710353
0.8181804856886904 0.8839839584973177 0.6454105429300823
0.9674930500210196 0.10867364500288523 0.3515187909589913
0.03311385975983827 0.9210011628128303 0.17411640258254468
0.6925925538517577 0.7800396397373549 0.1680190265680237
0.3626542185065835 0.40152899394143726 0.11779693451697704
0.49941526157617644 0.7937560700930117 0.5318055171581275
0.2935627891074417 0.03643967806803339 0.5235658675424386
0.2729321318848985 0.06687222853948149 0.430945928326545

桁数が多いですが、まぁいいでしょう。

ファイルを読み込み、float型に変換

ファイルを読み込み、数値を処理するために次のようなプログラムをかきました。

#!python3

with open("test.txt","r") as f:
    lines = [line.strip().split() for line in f.readlines()]
lines = [[float(x) for x in line] for line in lines]
print(lines)

これを実行すると、linesは次のようなリストになります。

[[0.3053029506483719, 0.49034955027588945, 0.3191128539531025], [0.917050789567466, 0.9397034315138278, 0.19792388328710353], [0.8181804856886904, 0.8839839584973177, 0.6454105429300823], [0.9674930500210196, 0.10867364500288523, 0.3515187909589913], [0.03311385975983827, 0.9210011628128303, 0.17411640258254468], [0.6925925538517577, 0.7800396397373549, 0.1680190265680237], [0.3626542185065835, 0.40152899394143726, 0.11779693451697704], [0.49941526157617644, 0.7937560700930117, 0.5318055171581275], [0.2935627891074417, 0.03643967806803339, 0.5235658675424386], [0.2729321318848985, 0.06687222853948149, 0.430945928326545]]

処理しやすくなったと思います。