繁体   English   中英

尝试从列表中的txt文件输入数据,然后创建一个列表,然后将值分配给各行

[英]Trying to input data from a txt file in a list, then make a list, then assign values to the lines

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']

我在代码中的何处以及可以使用哪些函数来定义此列表中的第一,第二,第三和第四值,以及下面所有将输出的值,我正在尝试

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

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

更新,也许我需要使用枚举? 我需要确保虽然可以使用中间2个值进行插补,但可以使用数字和数字而不是字符串,因为我用数学减去了它们

您确定这些是标签吗? 您不能为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:]

最后(响应下面的评论),如果您想要一组特定值的列表,则必须再次进行迭代,这对于列表理解很有用。 如果您想要allt每个元素的[2]索引值,则必须执行以下操作:

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

[]表示一个列表。

''表示一个字符串。

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#这是一个float。

我认为这也应该起作用

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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM