2016-08-15 5 views
1

最近、スクリプトを開始してネストしたループで問題が発生しました。最初のループから最初のイテレータオブジェクトを2番目のループの入力として適切に実行することはできません。ループ内の次のイテレータを自動的に呼び出す方法

問題自体は非常に簡単です。私は、データの行1の2番目の項目( '20')を範囲の数値に変更してファイルを作成したいと思います。 したがって、範囲の最初の数値が14の場合、ファイルの最初の行は(L、14,0,0,0,0)で、名前はdata1.txtになります。

データ:

L、1,5.827,20、-4.705,0
L、20,0,0,0,0
L、12,15,0、-6、 0

オリジナル脚本:

import re 
from itertools import islice 
import numpy as np 

x = np.arange(14,30.5,0.5) 
size = x.size        

with open('data.txt', 'r') as line:        
    for line in islice(line, 1, 2): 
     re.sub(r'\s', '', line).split(',')   
    nline = line[:2] + line[3:] 

x = iter(x) 
y = next(x) 

for i in x: 
    nline = nline[:2] + str(y)+ nline[3:]   

with open('data.txt', 'r') as file: 
    data = file.readlines() 
    data[1] = nline 

for i in range(1,size):         
    with open('data%i.txt' %i, 'w') as file:   
     file.writelines(data) 

EDITED:

Iveは私のスクリプトとImでほとんど進歩を遂げました。

最初のループの後、私は必要な出力を得ました(33件)。私が今したいのは、data1からdata33までの33の一意のファイルにそれらを書き込むことだけです。しかし、2番目のループが最初のループを33回反復して1089個のケースを作成するということが起こりそうです。したがって、ファイルで終わるのは最初のループの最後の行だけです。

ファイルの作成に2番目のループを許可するが、データを無効にする方法はありますか?

更新されたスクリプト:

import re 
from itertools import islice 
import numpy as np 

x = np.arange(14,30.5,0.5) 
size = x.size        

with open('data.txt', 'r') as line:        
    for line in islice(line, 1, 2): 
     re.sub(r'\s', '', line).split(',') 

for i in x: 
    y=str(i)            
    nline = line[:2] + y + line[4:] 

    with open('data.txt', 'r') as file: 
     data = file.readlines() 
     data[1] = nline 

     for i in range(1,size+1):  
      with open('data%i.txt' %i, 'w') as file: 
       file.writelines(data) 
       print data 
+0

:あなたはnline[:1]の線に沿って何かを試してみてください

nline[2:]に分割したいので

またnline[:2]は、リストの最初の2つの部分を取得します。 –

+0

こんにちはAmi Tavory。それは非常に簡単ではありませんが、より良い書式設定が意味することを本当に確信していない場合は、私は別のやり方をする必要がありますか?フィードバックをお寄せいただきありがとうございます。 –

+0

ちょうど上に、「編集されたx時間前の」リンクがあるはずです。それをクリックすると、変更内容が表示されます。 –

答えて

1

あなたのリストに文字列を連結しようとしているようです。 nline = nline[:2] + str(y)+ nline[3:]。これは型エラーで発生します。よりよい次の時間を、あなたのコードをフォーマットしてください

import re 
from itertools import islice 
import numpy as np 

x = np.arange(14,30.5,0.5) 
size = x.size        

with open('data.txt', 'r') as line:        
    for line in islice(line, 1, 2): 
    re.sub(r'\s', '', line).split(',')   
    nline = line[:1] + line[2:] #not sure what this does, but this might be wrong, change accordingly 

x = iter(x) 
y = next(x) 
temp = [] 
temp.append(y) 

for i in x: 
nline = nline[:1] + temp + nline[2:]   

with open('data.txt', 'r') as file: 
    data = file.readlines() 
    data[1] = nline 

for i in range(1,size):         
    with open('data%i.txt' %i, 'w') as file:   
     file.writelines(data) 
関連する問題