2016-08-15 81 views
1

我最近开始编写脚本,并且在嵌套循环方面遇到困难。我没有从第一个循环获取第一个迭代器对象作为第二个输入,以正确运行。如何自动调用循环中的下一个迭代器

问题本身很简单。我想将数据中第1行的第二项('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) 

编辑:

我已经取得了一些进展,我的脚本和我几乎在那里。

第一次循环后,我有我需要的输出(33例)。我现在要做的就是将它们写入33个唯一的文件,名为data1到data33。然而,似乎发生的是第二个循环在第一个循环中迭代了33次,并创建了1089个例子。所以文件中的结果只是第一个循环的最后一行。

任何建议如何让第二个循环的文件创建,但禁用它的数据?

更新后的脚本:

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

请格式化更好的下一次你的代码。 –

+0

Hi Ami Tavory。道歉,如果它不是很容易遵循,但我不知道你的意思是更好的格式,你会能够添加我应该做的不同/更好的是它更容易在眼睛上?感谢您的反馈。 –

+0

就在上面,应该有一个“编辑x小时前”的链接。如果你点击它,它会显示你的变化。 –

回答

1

似乎您试图将字符串到列表中。 nline = nline[:2] + str(y)+ nline[3:]。这将产生一个类型错误。

而且nline[:2]得到第2份名单,所以要拆分nline[:1]nline[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(',')   
    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)