2017-03-17 2 views
-1

いくつかの.datファイルをプロットするための小さなPythonスクリプトを作成します。そのためにはまずファイルを処理する必要があります。 .datファイルは次のようになります。ファイルを読み込み、テキストフィールドをドロップし、数値フィールドを残す

(Real64 
(numDims 1) 
(size 513) 
(data 
    [ 90.0282291905089 90.94377050431068 92.31708247501335 93.38521400778211 94.60593575951782 95.67406729228657 97.04737926298925 97.96292057679104 ...] 
) 
) 

テキスト部分と「通常」括弧を削除します。私はちょうど[.....]の間にデータが必要です。

from Tkinter import Tk 
from tkFileDialog import askopenfilename 

# just a small GUI to get the file 
Tk().withdraw() 
filename = askopenfilename() 

import numpy as np 

with open(filename) as f: 
    temp = f.readlines(5) #this is the line in the .dat file 

    for i in range(len(temp)-1): 
     if type(temp[i]) == str: 
      del temp[i] 

しかし、これは常に「アウト境界のインデックス」につながる:

私はこのような何かを試してみました。ヘルプは非常に高く評価されます。

+1

この '.dat'ファイルはどこから取得していますか? JSONのような別のフォーマットを生成しているものは何でもありますか?そうでない場合は、空白をコンマで置き換えてJSONとして解析することができます。 –

+1

「*テキスト部分を削除する」とはどういう意味ですか?はっきりしてください。与えられた入力に対して期待される出力を表示します。 '(size 513)' - > '(513)'、 '513'か、完全に削除するか?正規表現を使ってこれをすべて行うことができますが、正確に何をしたいのかを指定していません。 – smci

+0

正規表現を試しましたか? – chbchb55

答えて

0

私はちょうど[.....]の間にデータが必要です

# treat the whole thing as a string 
temp = '''(Real64 
(numDims 1) 
(size 513) 
(data 
    [ 90.0282291905089 90.94377050431068 92.31708247501335 ] 
) 
)''' 

# split() at open bracket; take everything right 
# then split() at close bracket; take everything left 
# strip() trailing/leading white space 
number_string = temp.split('[')[1].split(']')[0].strip() 

# convert to list of floats, because I expect you'll need to 
number_list = [float(i) for i in number_string.split(' ')] 

print number_string 
print number_list 

>>> 90.0282291905089 90.94377050431068 92.31708247501335 
>>> [90.0282291905089, 90.94377050431068, 92.31708247501335] 
+0

これもうまくいきました、ありがとう! –

0
print re.findall("\[([0-9. ]+)\]",f.read()) 

これはregular expressionと呼ばれ、それは私に2角括弧の間の桁ピリオドとスペース

\[ # literal left bracket 
(# capture the stuff in here 
[0-9. ] # accept 0-9 and . and space 
+ # at least one ... probably more 
) # end capture group 
\] # literal close bracket 

である代わりに、あなたが

inputdata = '''(Real64 
(numDims 1) 
(size 513) 
(data 
    [ 90.0282291905089 90.94377050431068 92.31708247501335 93.38521400778211 94.60593575951782 95.67406729228657 97.04737926298925 97.96292057679104 ...] 
) 
) 
''' 
from pyparsing import OneOrMore, nestedExpr 

data = OneOrMore(nestedExpr()).parseString(inputdata) 
print "GOT:", data[0][-1][2:-1] 
をpyparsingのようなものを使用することができ、すべてのものを見つけると言うています
+0

これは私を助けてくれてありがとう! –

関連する問題