-2

Python は初めてで、非常に基本的な質問があります。

次の例のようにフォーマットされたテキスト ファイルがあります (最初の数字は日付で、2 番目はそれに関連付けられた値です)。

4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921

さらに使用するために、テキスト ファイルから「値」を見つける方法が必要です。値は、数値である限り、ほとんど何でもかまいません。

4

3 に答える 3

2

ファイル内で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

それがジグソーパズルのピースであり、それらを組み合わせるのは難しくありません...

于 2012-12-03T17:40:24.887 に答える
1

いくつかのスペース (正確には空白文字) で区切られた値が 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])
于 2012-12-03T17:50:03.883 に答える
0

正規表現を使用すると、開始する必要があります...

#!/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"))
于 2012-12-03T17:43:09.643 に答える