我当前正在读取一个dummy.txt,内容显示如下:
8t1080 0.077500 0.092123 -0.079937
63mh9j 0.327872 -0.074191 -0.014623
63l2o3 0.504010 0.356935 -0.275896
64c97u 0.107409 0.021140 -0.000909
现在,我正在使用python读取它,如下所示:
lines = open("dummy.txt", "r").readlines()
我想建立一个结构,以便可以有一个列表...或数组数组(无关紧要)。每个较小的数组都将第0个元素作为字符串,并且以下小数点将为浮点数。为此,我目前正在尝试:
for line in lines:
line = line.split()
for x in range(1, len(line)):
line[x] = float(line[x])
有趣的是,这不起作用,因为
for line in lines:
line = line.split()
实际上不会拆分行并更改读取的数据(具体来说,行变量)。
同时,下面的方法可以成功修改读取的数据(lines变量)。
for x in range(0, len(lines)):
lines[x] = lines[x].split()
for x in range(1, len(line)):
line[x] = float(line[x])
那么,两个具有两个不同结果的for循环之间有什么区别?
答案 0 :(得分:1)
在这种情况下,您将从pandas
中受益匪浅:
import pandas as pd
df = pd.read_csv('dummy.txt', sep=' ', header=None)
>>> df.values
array([['8t1080', 0.0775, 0.092123, -0.079937],
['63mh9j', 0.327872, -0.074191, -0.014622999999999999],
['63l2o3', 0.5040100000000001, 0.356935, -0.27589600000000003],
['64c97u', 0.10740899999999999, 0.02114, -0.000909]], dtype=object)
或者一劳永逸(无需将您的文本文件另存为数据框对象):
my_array = pd.read_csv('dummy.txt', sep=' ', header=None).values
>>> my_array
array([['8t1080', 0.0775, 0.092123, -0.079937],
['63mh9j', 0.327872, -0.074191, -0.014622999999999999],
['63l2o3', 0.5040100000000001, 0.356935, -0.27589600000000003],
['64c97u', 0.10740899999999999, 0.02114, -0.000909]], dtype=object)
答案 1 :(得分:1)
对于第一个示例,您只需要一个数据结构即可输出到
data = []
lines = open("dummy.txt", "r").readlines()
for line in lines:
line = line.split()
for x in range(1, len(line)):
line[x] = float(line[x])
data.append(line)
数据列表将包含您想要的内容。
答案 2 :(得分:0)
在您的第一种情况下,它正在工作,但是每次for循环时,该行变量都会重置为下一个值,并且其当前值会丢失,无法接收下一个值。
aux=[]
for line in lines: #here the program changes the value of line
line = line.split() # here you change the value of line
for x in range(1, len(line)):
line[x] = float(line[x])
aux.append(line)
使用辅助变量,您可以“保存”您的值以供以后使用