2017-04-15 11 views
2

上のファイルの行を表すタプルのリストを返し、ファイルを考える:は、私が「SAMPLE.TXT」という名前のファイルを持っているし、次の内容が含まのPython

1 city1 85 100 0.05 
2 city2 80 100 0.05 
3 city3 34 100 0.32 

私はタプルのリストを返したいですファイル内の行を表します。

項目だから結果はこのようになる名前string と重量float

以外のタイプintでなければなりません:

[(1, 'city1', 85, 100, 0.05), (2, 'city2', 80, 100, 0.05), (3, 'city3', 34, 100, 0.32)] 

これは私が今まで持っているコードです。

def reader(filename): 
    with open(filename) as f: 
     arr = [tuple(line.split()) for line in f] 
     return arr 

print(reader("sample.txt")) 

結果は次のとおりです。

あなたが見ることができるように
[('1', 'city1', '85', '100', '0.05'), ('2', 'city2', '80', '100', '0.05'), ('3', 'city3', '34', '100', '0.32')] 

すべての項目がstringsですが、私はそれが上記表示されますが - 私が立ち往生し、私が何をすべきか知っているdon'y同じようfloatとしてintとして数字とフロート番号を載せていきたいと思います。

お願いします。

上級者用。 ご挨拶

答えて

1

対応するタイプで圧縮して文字列から変換することができます。

def reader(filename): 
    types = [int, str, int, int, float] 
    with open(filename) as f: 
     return [tuple(t(x) for t, x in zip(types, line.split())) for line in f] 
+0

あなたのアドバイスをありがとう! –

0
def convert(x): 
    try: 
     a = float(x) 
     b = int(a) 
     return b if a == b else a 
    except: 
     return x 

def reader(filename): 
    lines = [] 
    with open(filename) as f: 
     for l in f: 
      lines.append(tuple(map(convert, l.split()))) 
    return lines 
+0

ありがとう –

関連する問題