2016-06-16 21 views
1

私のプログラムでは、infileを読み込んでグラフにプロットしようとしています。 INFILEは行ごとに1つだけの項目が含まれていたときにそれが働いていたが、この新しいファイルには、同じ行に複数の項目があります。同じ行に複数の項目がある項目を読む

1行目:-4.6653184e-01 -3.9003953e-01 -1.3689525e +は、 00 -2.9784036e-01 -1.2366933e + 00 -1.4433164e + 00 -1.7245383e + 00 -2.2787106e + 00 -9.8088629e-01 -1.9053069e + 00 -1.7806724e + 00 -3.1259933e + 00 -2.1796645e + 00 -1.8323782e + 00 -1.9089487e + 00 -3.6322765e + 00

行2:-8.9710621e-01 -6.2431759e-01 -1.4762999e + 00 -2.2668609e-01 -1.6593426e + 00 -1.5644687 e + 00 -2.4312715e + 00 -2.8894224e + 00 -1.7810424e + 00 -2.2357098e + 00 -2.8545336e + 00 -3.7422563e + 00 -3.0884226e + 00 -2.9146711e + 00 -3.3407812e + 00 -5.2601065 e + 00

私は

ライン= infile.readlines()

ループのためにいる間に前にそれを行うことができたが、今はどこここから行くするか分かりません。私はかなりPythonに新しいですし、私は助けていただければ幸いです。

また、約35,000行があることに注意してください。テキストファイルに入り、入力するたびに「入力」できません。ありがとうございました!

+0

sedを使用すると、すべての行の後に「入力」することができます。sed s// \ n/g

答えて

0

これは、.readlines()がそうしているからです。 1行で見つけたすべての値を1つの項目としてリストに追加します。代わりに、各行で区切り文字に基づいて行の各番号を区切る追加の手順が必要です。このためには、.split()を使用し、区切り文字を空の文字列(単一のスペースと同じ)として指定することができます。

output_to_plot = [] 

with open('multi_items.txt', 'r') as infile: 
    for line in infile: 
     output_to_plot.extend([float(item) for item in line.split(' ')]) 

print(output_to_plot) 
0

あなたのやりたいことによって異なります。

lines = [] 
[lines.extend(_.split()) for _ in fd.readlines()] 
print lines 

これはあなたの配列の位置ごとに一つの値を与える:あなたはあなたとあなたが持っているもの置き換えることができ単一のデータセットとして、すべての値を選択する場合の行からは、貼り付けました:

['-4.6653184e-01', '-3.9003953e-01', '-1.3689525e+00', '-2.9784036e-01', '-1.2366933e+00', '-1.4433164e+00', '-1.7245383e+00', '-2.2787106e+00', '-9.8088629e-01', '-1.9053069e+00', '-1.7806724e+00', '-3.1259933e+00', '-2.1796645e+00', '-1.8323782e+00', '-1.9089487e+00', '-3.6322765e+00', '-8.9710621e-01', '-6.2431759e-01', '-1.4762999e+00', '-2.2668609e-01', '-1.6593426e+00', '-1.5644687e+00', '-2.4312715e+00', '-2.8894224e+00', '-1.7810424e+00', '-2.2357098e+00', '-2.8545336e+00', '-3.7422563e+00', '-3.0884226e+00', '-2.9146711e+00', '-3.3407812e+00', '-5.2601065e+00'] 

あなたは、各列が別のデータセットであるデータの行列を作成したい場合は、あなたが代わりにあなたのreadlinesと:

(あなたの例では)のような2行N列の行列が生成されます
lines = [_.split() for _ in fd.readlines() 

:すべての値が空白で区切られている場合

[['-4.6653184e-01', '-3.9003953e-01', '-1.3689525e+00', '-2.9784036e-01', '-1.2366933e+00', '-1.4433164e+00', '-1.7245383e+00', '-2.2787106e+00', '-9.8088629e-01', '-1.9053069e+00', '-1.7806724e+00', '-3.1259933e+00', '-2.1796645e+00', '-1.8323782e+00', '-1.9089487e+00', '-3.6322765e+00'], 
['-8.9710621e-01', '-6.2431759e-01', '-1.4762999e+00', '-2.2668609e-01', '-1.6593426e+00', '-1.5644687e+00', '-2.4312715e+00', '-2.8894224e+00', '-1.7810424e+00', '-2.2357098e+00', '-2.8545336e+00', '-3.7422563e+00', '-3.0884226e+00', '-2.9146711e+00', '-3.3407812e+00', '-5.2601065e+00']] 
0

が、あなたは、単に使用することができますが

for line in lines: 
    items = line.split() 

別のもので区切られている場合は、line.split(separator)を使用してください。これは、すべての出現時に文字列をseparatorに分割します(セパレータが指定されていない場合は、連続する空白の後で分割されます)。次に処理できる項目のリストを返します。

関連する問題