我有一个以这种方式排序的文本文件:
1,1,1,
1,1,1,
1,1,1,
我的Python脚本将文本文件中的每一行作为字符串读取,基于逗号分隔,然后将其转换为十进制数字以进行绘图和分析。我想创建一个由合并行组成的单个数组,如下所示:
[1,1,1
1,1,1
1,1,1]
我尝试过使用numpy中的vstack方法,但似乎文本文件中有一个空白的剩余部分,我无法摆脱它。
>>>
[735019.6277, 0.0, 1.0178, 3.0, -2.104]
[735019.6278, 0.0, 15.361, 3.0, -2.078]
[735019.628, 0.0, 29.579, 3.0, -2.0682]
[]
由于这个空间,我无法将每一行连接成一个数组。
以下是代码:
from numpy import *
from scipy import *
file = open("results_test.txt", 'r')
line = file.readline()
data = line.split(',')
data[-1] = 0
table = data
x = 0
while (x < len(table)):
table[x] = float(table[x])
x = x+1
del(table[-1])
print table
while line:
line = file.readline()
data = line.split(',')
data[-1] = 0
x = 0
while (x < len(data)):
data[x] = float(data[x])
x = x+1
del(data[-1])
print data
table = vstack((table,data))
file.close()
这是错误:
Traceback (most recent call last):
File "C:\Python27\read_txt.py", line 26, in <module>
table = vstack((table,data))
File "C:\Python27\lib\site-packages\numpy\core\shape_base.py", line 226, in vstack
return _nx.concatenate(map(atleast_2d,tup),0)
ValueError: array dimensions must agree except for d_0
关于这个空间是什么以及如何摆脱它以便我可以使用vstack方法的任何想法?
答案 0 :(得分:2)
这是while循环的错误倾向的一个例子。尽量避免它们。
首先检查行是否为空(while line
),然后然后您读取新行(line = file.readline()
)。这使得检查相当无用。
相反,请使用for line in file
,然后删除line = file.readline()
行。
答案 1 :(得分:1)
要删除您阅读的数据中的额外空格,只需对每一行执行此操作:
data = [x.strip() for x in line.split(',')]
答案 2 :(得分:1)
试试这个:
data = []
for line in file:
data.extend(int(x) for x in line.split(',') if not x.isspace())
答案 3 :(得分:1)
正如我在上面的评论中所提到的,使用strip()来清理数据。改变你的
data = line.split(',')
到
data = line.split(',')
data = [i.strip() for i in data] # insert this line
您可能还想考虑使用此构造来打开您的文件,优点是它会在您完成后为您关闭文件,并且还会发生异常。
with open("results_test.txt") as file:
line = file.readline()
...
答案 4 :(得分:0)
import itertools
parse_numbers = lambda s: map(float, filter(None, map(str.strip, s.split(','))))
with open('input.txt') as f:
result = list(itertools.chain(*map(parse_numbers, f.readlines())))
print result