0

Python (ver 3.2) プログラムを使用して開いて読み取ろうとしているデータを含むプレーン テキスト ファイルがあり、そのデータをプログラム内のデータ構造にロードしようとしています。

これが私のテキストファイルの外観です(ファイルは「data.txt」と呼ばれます)

NAME: Joe Smith
CLASS: Fighter
STR: 14
DEX: 7

私のプログラムは次のようになります。

player_name = None
player_class = None
player_STR = None
player_DEX = None
f = open("data.txt")
data = f.readlines()
for d in data:
    # parse input, assign values to variables
    print(d)
f.close()

私の質問は、変数に値を割り当てるにはどうすればよいですか (プログラム内で player_STR = 14 を設定するようなものです)。

4

3 に答える 3

2
player = {}
f = open("data.txt")
data = f.readlines()
for line in data:
    # parse input, assign values to variables
    key, value = line.split(":")
    player[key.strip()] = value.strip()
f.close()

これで、プレーヤーの名前は になりplayer['name']、ファイル内の他のすべてのプロパティについても同じことが言えます。

于 2012-12-15T16:11:35.160 に答える
1
import re

pattern = re.compile(r'([\w]+): ([\w\s]+)')

f = open("data.txt")
v = dict(pattern.findall(f.read()))
player_name = v.get("name")
plater_class = v.get('class')
# ...


f.close()
于 2012-12-15T16:12:44.023 に答える
0

これを行う最も直接的な方法は、変数を 1 つずつ割り当てることです。

f = open("data.txt")              
for line in f:                       # loop over the file directly
    line = line.rstrip()             # remove the trailing newline
    if line.startswith('NAME: '):
        player_name = line[6:]
    elif line.startswith('CLASS: '):
        player_class = line[7:]
    elif line.startswith('STR: '):
        player_strength = int(line[5:])
    elif line.startswith('DEX: '):
        player_dexterity = int(line[5:])
    else:
        raise ValueError('Unknown attribute: %r' % line)
f.close()

とはいえ、ほとんどの Python プログラマーは、変数ではなく辞書に値を格納していました。フィールドは (行末を削除して) 剥ぎ取り、次のように分割できますcharacteristic, value = data.rstrip().split(':')。値を文字列ではなく数値にする必要がある場合は、float()またはint()で変換します。

于 2012-12-15T16:13:40.730 に答える