2012-08-10 114 views
1

无论我尝试什么,“我”始终保持为“1”。我试图在每次它转到文件夹中包含“1Chr”的下一个文件时向“i”添加“1”。蟒蛇循环不加1

蟒蛇

for name in glob.glob('*.html'): 
    i = 1 
    with open(name) as k: 
    content = k.read() 
    if '1Chr.'+str(i)+'.' in name: 
     book = name.split('.')[0].upper().rstrip() 
     x=open('final/'+book+'.SFM', 'a') 
     x.write(content) 
     i += 1 
     x.close()  
+5

您在每次迭代开始时将'i'重置为'1'。 – 2012-08-10 15:45:48

+0

你在每次迭代开始时设置i = 1。可能你想在for语句 – FxIII 2012-08-10 15:47:56

回答

6

将上面的for循环i = 1
对于每一个新的文件,要重设i是一个,所以它不能超越2.

1

i=1for循环外。您每次通过循环将其重置为1

4

地方i=1上面的for循环:

i = 1 
for name in glob.glob('*.html'): 
    with open(name) as k: 
    content = k.read() 
    if '1Chr.'+str(i)+'.' in name: 
     book = name.split('.')[0].upper().rstrip() 
     x=open('final/'+book+'.SFM', 'a') 
     x.write(content) 
     i += 1 
     x.close() 

或更好地利用enumerate()enumerate()会自动增加i

for i,name in enumerate(glob.glob('*.html'),1): 
+2

之前设置i = 1我喜欢'enumerate'建议,但是这里需要对代码进行一些调整,因为OP不计算每个'html'文件,而只包括那些' '历代志。' + STR(ⅰ)+ ''在名义上'是真实的。 – DSM 2012-08-10 15:51:58

1

你在for的每一次迭代复位i1循环。移动i的声明/初始化,以便它在循环之前:

i = 1 
for name in glob.glob('*.html'): 
    with open(name) as k: 
    content = k.read() 
    if '1Chr.'+str(i)+'.' in name: 
     book = name.split('.')[0].upper().rstrip() 
     x=open('final/'+book+'.SFM', 'a') 
     x.write(content) 
     i += 1 
     x.close()