1

この方法で注文されたテキストファイルがあります。

1,1,1,
1,1,1,
1,1,1,

私のPythonスクリプトは、テキストファイル内の個々の行を文字列として読み取り、コンマに基づいて区切り、グラフ化と分析のために10進数に変換します。以下のように、マージされた行で構成される単一の配列を作成したいと思います。

[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]
[]

このスペースのため、各行を1つの配列に結合することはできません。

コードは次のとおりです。

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メソッドを使用できるようにそれを取り除く方法について何か考えはありますか?

4

5 に答える 5

2

これは、whileループのエラーが発生しやすい例です。それらを避けるようにしてください。

最初に行が空でないかどうかを確認し(while line)、次に新しい行を読み取ります(line = file.readline())。これにより、チェックはかなり役に立たなくなります。

代わりに、を使用for line in fileして、その行を削除してくださいline = file.readline()

于 2012-06-03T01:07:00.993 に答える
1

読み取るデータの余分な空白を削除するには、行ごとに次のようにします。

data = [x.strip() for x in line.split(',')]
于 2012-06-03T01:03:08.870 に答える
1

これを試して:

data = []
for line in file:
    data.extend(int(x) for x in line.split(',') if not x.isspace())
于 2012-06-03T01:07:09.753 に答える
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()
      ...
于 2012-06-03T01:07:09.893 に答える
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
于 2012-06-03T07:37:20.423 に答える