这可能是一个非常基本的问题。我有一个带有浮点值行的文本文件。例如,文本文件myRandomizedFile.txt
如下所示:
1992.0 12.999 0.0 0.0 7980.0
1991.0 11.593 0.625 0.0 7997.0
1992.0 12.999 0.625 0.0 7989.0
1992.0 12.999 0.375 0.0 7998.0
1994.0 14.989 0.0 0.0 7982.0
110.0 42.945 1.0 0.0 7973.0
1992.0 15.077 0.125 0.0 7973.0
492.0 8.824 0.25 1.0 7980.0
1991.0 20.401 0.0 0.0 7997.0
1993.0 12.999 0.625 0.0 7934.0
但是,当我尝试通过索引访问这些数字时,我得到的只是每个字符串字符。例如,如果我想通过尝试使用1992.0
的索引来访问左上角的数字allTen[0][0]
,它将告诉我allTen[0] = 1
。
下面是我的代码:
f = open("../BestTen.txt") #Randomize the parameter set order for pairing
o = open("../myRandomizedFile.txt", "w")
entire_file = f.read()
lines_in_list = entire_file.split("\n")
num_lines = len(lines_in_list)
random_nums = random.sample(xrange(num_lines), num_lines)
for i in random_nums:
o.write(lines_in_list[i] + "\n")
o.close()
f.close()
rand = open("../myRandomizedFile.txt") #Pairs up lines (1,2), (3,4), (5,6), (7,8), (9,10)
allTen = rand.read()
print "AllTen: ", allTen
print "AllTen[0]: ", allTen[0]
ind1Aff = allTen[0][0]
ind2Aff = allTen[1][0]
ind1Vff = allTen[0][1]
最底行是给我一个IndexError
,因为allTen[0]
是1
而不是[1992.0 12.999 0.0 0.0 7980]
。 我如何使程序将其识别为浮点列表而不是一串字符(字符串)?
答案 0 :(得分:2)
您在这里:
with open("myRandomizedFile.txt") as file:
lines = file.readlines()
allTen = np.array([float(i) for l in lines for i in l.split()]).reshape((len(lines), 5))
print (allTen[0][0])
输出
1992.0
答案 1 :(得分:1)
您可以将NumPy与np.genfromtxt
一起使用。这是一个演示:
from io import BytesIO
x = BytesIO(b"""1992.0 12.999 0.0 0.0 7980.0
1991.0 11.593 0.625 0.0 7997.0
1992.0 12.999 0.625 0.0 7989.0
1992.0 12.999 0.375 0.0 7998.0
1994.0 14.989 0.0 0.0 7982.0
110.0 42.945 1.0 0.0 7973.0
1992.0 15.077 0.125 0.0 7973.0
492.0 8.824 0.25 1.0 7980.0
1991.0 20.401 0.0 0.0 7997.0
1993.0 12.999 0.625 0.0 7934.0""")
res = np.genfromtxt(x)
结果:
print(res)
[[ 1.99200000e+03 1.29990000e+01 0.00000000e+00 0.00000000e+00
7.98000000e+03]
[ 1.99100000e+03 1.15930000e+01 6.25000000e-01 0.00000000e+00
7.99700000e+03]
...
[ 1.99100000e+03 2.04010000e+01 0.00000000e+00 0.00000000e+00
7.99700000e+03]
[ 1.99300000e+03 1.29990000e+01 6.25000000e-01 0.00000000e+00
7.93400000e+03]]
答案 2 :(得分:0)
通常,您必须读取数组格式的文件,并去除换行符并拆分列表,然后找到解决方法。
with open('myRandomizedFile.txt', 'r') as f:
data = f.readlines()
data = [l.strip().split() for l in data]
print(data[0][0])
#output as: data[0][0]: 1992.0
# data[1]: ['1991.0', '11.593', '0.625', '0.0', '7997.0']