Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试从列表中的txt文件输入数据,然后创建列表,然后为行分配值_Python_String_List_Append - Fatal编程技术网

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

Python 尝试从列表中的txt文件输入数据,然后创建列表,然后为行分配值,python,string,list,append,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.

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

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
在我的代码中,我可以用什么函数来定义这个列表中的第1个和第4个值,以及下面将输出的所有值,我正在尝试

['mw91 42.927 -72.84 2.8']
但这并没有给我-72.84,这是一个错误,然后其他时候它去列表并没有属性分割

更新,也许我需要使用枚举??我需要确保我输入的中间2个值可以用数字而不是字符串,因为我用数学减去它们意味着一个列表

“”表示一个字符串

allt=['MW9142.927-72.842.8']

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

allt[0]-->“MW9142.927-72.842.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

您确定这些是选项卡吗?您可以不为split指定任何参数,它会自动在空白处分割(这意味着您也不必事先去掉换行符)。我将您的样本复制到一个文件中,并使其按如下方式工作:

allt[0][2] or 
allt[i][2] 
first, _else = line.split()[0], line.split()[1:]
脚注:如果您放弃了对第一个列表的理解,那么只需对文件进行一次迭代,这样就不那么浪费了


刚才看到您还需要帮助转换浮点值。假设
line.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'
对于Python2,首先将
替换为*\u else=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]

最后(回应下面的评论),如果您想要一个包含特定值集的列表,您必须再次迭代,这就是列表理解的有用之处。如果需要
allt
中每个元素的
[2]
索引值,则必须执行以下操作:

allt[0][2] or 
allt[i][2] 
first, _else = line.split()[0], line.split()[1:]

我认为这也应该有效

 >>> some_items = [item[2] for item in allt]
 >>> some_items
 [-72.84, -72.58, -72.679]
如果你需要第一个浮点数之后的值

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

尝试allt.append(i.split('\t'))而不是allt.append(i.split(''))。不,整个过程都很疯狂,我从左边开始得到20行输出,下一列中有19行,然后是18行,依此类推,直到最右边的列有1行@SMAC89。唯一的问题是,当我键入say print allt[2]时我希望它打印在下一行代码中使用我在第三个位置的文件中的所有20行文本。也就是说,上面-72.84-72.58然后-72.679所有这些我不确定我是否理解,但听起来好像您想为每行值打印一个特定的列(根据请求的输入,这就是它的外观)。如果是这样的话,你总是要循环。(我将在上面举一个例子)。同样,谢谢,(首先,*\u else)是一个错误,在我的comp上,代码的第4行。上面写着,啊,那是我没想到的蟒蛇。您可以尝试使用以下选项:
首先,\u else=line.split()[0],line.split()[1://code>因此,如果我在一个集合中获取item1和item2,并将它们输入到一个函数中,然后返回值,item1和item2会知道它们来自哪个item0吗??