Python は初めてで、非常に基本的な質問があります。
次の例のようにフォーマットされたテキスト ファイルがあります (最初の数字は日付で、2 番目はそれに関連付けられた値です)。
4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921
さらに使用するために、テキスト ファイルから「値」を見つける方法が必要です。値は、数値である限り、ほとんど何でもかまいません。
Python は初めてで、非常に基本的な質問があります。
次の例のようにフォーマットされたテキスト ファイルがあります (最初の数字は日付で、2 番目はそれに関連付けられた値です)。
4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921
さらに使用するために、テキスト ファイルから「値」を見つける方法が必要です。値は、数値である限り、ほとんど何でもかまいません。
ファイル内で1行ずつループするには、次のことを試してください。
with open('filename') as fin:
for line in fin:
print line
次に、文字列から値を取得する例を次に示します。
>>> s = '4.12. -11'
>>> s.rsplit(' ', 1)
['4.12.', '-11'] # two elements
次に、インデックスを作成します。
value = s.rsplit(' ', 1)[1]
# '-11'
しかし、それは文字列を与えるので、ここで整数に変換します:
myval = int(value)
# -11
それがジグソーパズルのピースであり、それらを組み合わせるのは難しくありません...
いくつかのスペース (正確には空白文字) で区切られた値が 1 つしかない場合:
data = {}
with open('filename') as f:
for line in f:
row = line.split()
data[row[0]] = row[1]
前提: 最初の列のキーは一意です。
data[value]
アクセスして値を取得できるようになりました。次に例を示します。
>>> print data['8.12.']
921
キー/日付ごとに複数の値を持つことができる場合:
from collections import defaultdict
data = defaultdict(list)
with open('filename') as f:
for line in f:
row = line.split()
data[row[0]].append(row[1])
これで、データは辞書になり、値はファイルにあるすべての値のリストになります。したがって、ファイルの場合:
1.1. 10
2.1. 11
1.1. 12
にdata['1.1']
なります["10", "12"]
要件を完全に満たすために、文字列から数値への変換を追加する必要がある場合があります。
data[row[0]] = int(row[1])
また:
data[row[0]] = float(row[1])
正規表現を使用すると、開始する必要があります...
#!/usr/bin/env python
import re
lines = ["4.12. -11",
"5.12. 24",
"6.12. 192",
"7.12. -34",
"8.12. 921"]
regexp=re.compile("^(?P<day>\d+)\.(?P<month>\d+)\.\s+(?P<val>-*\d+(\.\d+)*)")
if __name__ == "__main__":
for line in lines:
matcher = regexp.match(line)
if regexp.match(line):
print "%s-%s:%s" % (matcher.group("day"), matcher.group("month"), matcher.group("val"))