替换该索引中的每个项目并写入文件

时间:2015-02-11 18:21:56

标签: python regex python-3.x

我有一个普通列表,我想每25个索引更改该列表的元素(从第二个索引开始)。所以我创建了一个循环来生成该数字并将其存储在一个列表中(即2,27,52,77 ....)。然后我打印了该索引的每个项目,但是现在我似乎找不到使用re.sub的方法。 我想用新的元素替换这些元素,然后将列表中的所有项目(不仅仅是我已经更改过的那些)写入文件中。

所以目标是使用re.sub或其他方法来替换:

'  Title                  =' by '  Author                 ='

我如何实现这一目标?

这是我的代码:

counter = 0           
length = len(flist) # Max.Size of List
ab = [2] 

for item in flist:
    counter +=1    
    a = ((25*counter)+2) #Increment 
    ab.append(a)
    if a >= length:
        ab.pop() #Removing last item
        break

for i in ab: 
    print(flist[i-1]) #Printing element in that index
    #replace item

#write to file
fo = open('somefile.txt', 'w')
for item in flist:    
 fo.write(item)

fo.close()

PS:我是python的新手,sugestions和批评是非常折旧的!

2 个答案:

答案 0 :(得分:1)

要匹配您可以使用的文字:

new_str = re.sub(r'\s+Title\s+=', 'Author                 =', old_str) 

\s表示空格,+表示一个或多个。您可以使用\s{4}来精确匹配4个空格,或者根据需要使用多个空格。更多信息here

或者,您可以使用replace()

new_str = old_str.replace('  Title                  =', 'Author                 =')

您可以使用range()来简化其余代码。 range()有3个参数,其中2个是可选的;开始,结束,步骤。

for i in range(2, 200, 25):
    print(i)

最后,您可以使用with open()代替open()

with open('my_file.txt', 'w') as fo:
    # Do stuff here.
    ....
    ....
    # File closes automatically.

答案 1 :(得分:0)

类似的东西:

for i in ab:
    fixed = re.sub("/  Title                  =/", "  Author                 =", flist[i-1])
    print(fixed) #Printing replaced line

免责声明:我使用的是移动设备,因此无法测试其正确性