Python:如何使用带有2种输入的txt文件的循环

时间:2013-03-17 17:56:12

标签: python loops input

我需要编写一个包含名称列表的程序,每组名称下面(2行)是逗号(2)的2组数字

这样的事情

Jane
Doe
14.5,12.3

使用相同的3行重复这一操作,直到循环达到0,0,这就是循环的终止。

如何使用同时输入完全编写循环,以及如何在字符串和数字之间分隔。

3 个答案:

答案 0 :(得分:1)

如果项目分为三行,我会使用:

data = []
with open('inputfile.txt') as inf:
    numbers = None
    while numbers != [0, 0]:
        name1 = next(inf).strip()
        name2 = next(inf).strip()
        numbers = [float(n) for n in next(inf).split(',')]
        data.append((name1, name2, numbers))

这使用输入文件作为可迭代的,一次获得3行,直到numbers等于[0, 0]

答案 1 :(得分:0)

可能有意义的第一步是将列表缩减为您需要的名称和数字。你可以很容易地做到这一点,因为你只对第一行'0,0'之前的列表部分感兴趣:你可以只取该行的索引并将列表切片到那里以获得该部分:

your_data = ['Jane', 'Doe', '14.5,12.3', etc etc]
z_index = your_data.index('0,0')
new_data = your_data[:z_index + 1] # +1 to include '0,0' as the last element

从那里,它取决于你想要实际处理数据。但是,假设你想要一个带有名称和数字的词典列表:

results = []
while new_data:
    results.append({'first':new_data[0],
                    'last':new_data[1],
                    'numbers':new_data[2]})
    new_data = new_data[3:]

这里的数字对仍然是字符串,因为它是从你的txt文件中读取的。如果需要,可以将数字拆分并将它们转换为浮点数。

另外,我在这里做了一些假设:你的列表总是会有'0,0'的行,并且它不可能错过任何第一个/最后一个/数字行。如果情况并非总是如此,那么您需要一些逻辑来处理异常。

答案 2 :(得分:0)

我使用takewhile和使用ast.literal_eval的自定义函数以及来自grouper的{​​{1}}食谱,然后转置它,例如:< / p>

itertools