给定一个文件,返回一个元组列表,表示Python上

时间:2017-04-15 03:04:33

标签: python file tuples

我有一个名为“sample.txt”的文件,其中包含以下内容:

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

我想返回一个表示文件中行的元组列表。

除了名称int之外,这些项目应为string类型 和权重float

所以结果会是这样的:

[(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但我希望将数字设为int,将浮动数字设为float,就像上面显示的那样但是我卡住了我不知道该怎么做。

你能帮我吗?

高级的谢谢。 问候

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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