无法在Python中删除文本文件空白

时间:2012-06-03 00:59:52

标签: python io numpy text-files

我有一个以这种方式排序的文本文件:

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方法的任何想法?

5 个答案:

答案 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