最近、スクリプトを開始してネストしたループで問題が発生しました。最初のループから最初のイテレータオブジェクトを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
:あなたは
nline[:1]
の線に沿って何かを試してみてくださいnline[2:]
に分割したいのでまた
nline[:2]
は、リストの最初の2つの部分を取得します。 –こんにちはAmi Tavory。それは非常に簡単ではありませんが、より良い書式設定が意味することを本当に確信していない場合は、私は別のやり方をする必要がありますか?フィードバックをお寄せいただきありがとうございます。 –
ちょうど上に、「編集されたx時間前の」リンクがあるはずです。それをクリックすると、変更内容が表示されます。 –