尝试从列表中的txt文件输入数据,然后创建列表,然后为行分配值

时间:2013-08-04 21:26:24

标签: python string list append

allt = []
with open('towers1.txt','r') as f:   
    towers = [line.strip('\n') for line in f]
    for i in towers:
        allt.append(i.split('\t'))
    print allt [0]

现在我需要帮助,我输入这个文本

mw91 42.927 -72.84 2.8
yu9x 42.615 -72.58 2.3
HB90 42.382 -72.679 2.4

当我输出即时

['mw91 42.927 -72.84 2.8']

在我的代码中我可以使用哪些函数来定义此列表中的第1个第2个第3个和第4个值以及下面将输出的所有值,即时尝试

allt[0][2] or 
allt[i][2] 

但是那个剂量给了我-72.84,这是一个错误,然后其他时候它列表没有属性拆分

更新,也许我需要使用枚举?我需要确保尽管可以使用中间2值,但是数字而不是字符串,因为我用数学减去它们

3 个答案:

答案 0 :(得分:1)

你确定那些是标签吗?您可以为split指定无参数,它会自动在空格上拆分(这意味着您不必事先剥离换行符)。我将你的样本复制到一个文件中并让它像这样工作:

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
        allt.append(line.split())

>>>print allt[0]
['mw91', '42.927', '-72.84', '2.8']
>>>print allt[0][1]
'42.927'

脚注:如果你摆脱了第一个列表理解,你只需要迭代一次文件,这样就不那么浪费了。


刚看到你想要帮助转换浮点值。假设line.split()正确地分割数据,那么下面的内容可能会起作用:

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
         first, *_else = line.split() #Python3
         data = [first]
         float_nums = [float(x) for x in _else]
         data.extend(float_nums)
         allt.append(data)

>>>print allt[0]
['mw91', 42.927, -72.84, 2.8]

对于Python2,将first, *_else = line.split()替换为以下内容:

first, _else = line.split()[0], line.split()[1:]

最后(响应下面的评论),如果你想要一组特定值的列表,你将不得不再次迭代,这就是列表推导可能有用的地方。如果您想要[2]中每个元素的allt索引值,则必须执行以下操作:

 >>> some_items = [item[2] for item in allt]
 >>> some_items
 [-72.84, -72.58, -72.679]

答案 1 :(得分:0)

[]暗示一个列表。

''表示一个字符串。

allt = ['mw91 42.927 -72.84 2.8']

allt是一个包含字符串的列表:

allt [0] - > 'mw91 42.927 -72.84 2.8'

allt [0] [2] - > '9'

allt.split() - > ['mw91','42 .927',' - 72.84','2.8']

allt.split()[2] - > '-72.84'#这仍然是一个字符串。

float(allt.split()[2]) - > -72.84#这是一个漂浮物。

答案 2 :(得分:0)

我认为这也应该有用

with open('towers.txt', 'r') as f:
    allt = map(str.split, f)

如果您需要在第一个之后的值浮动......

with open('towers.txt', 'r') as f:
    allt = [line[:1] + map(float, line[1:]) for line in map(str.split, f)]