如何将字符串写入特定的行号?

时间:2013-06-02 02:58:20

标签: python

经过大量搜索后,我无法找到答案。 我想做的是,根据我的字符串进行字符串搜索并在其上方或下方的行上书写。

到目前为止,我已经完成了这件事:

file = open('input.txt', 'r+')  
f = enumerate(file)  
for num, line in f:    
    if 'string' in line:    
        linewrite = num - 1   
            ???????

编辑扩展初步问题: 我已经选择了最能解决我最初问题的答案。但是现在使用Ashwini的方法我重写了文件,我怎么能搜索和替换字符串。更具体一点。

我有一个

的文本文件
SAMPLE  
AB  
CD  
..  
TYPES  
AB  
QP  
PO  
..  
RUNS  
AB  
DE  
ZY

我想将AB替换为XX仅限SAMPLERUNS 我已经尝试过多种使用replace()的方法。我试过像

这样的东西
if  'SAMPLE' in line:  
f1.write(line.replace('testsample', 'XX'))  
if 'RUNS' in line:      
f1.write(line.replace('testsample', 'XX'))  

那不起作用

2 个答案:

答案 0 :(得分:3)

以下内容可用作模板:

import fileinput

for line in fileinput.input('somefile', inplace=True):
    if 'something' in line:
        print 'this goes before the line'
        print line,
        print 'this goes after the line'
    else:
        print line, # just print the line anyway

答案 1 :(得分:2)

您可能必须先读取列表中的所有行,如果条件匹配,则可以使用list.insert

将字符串存储在特定索引处
with open('input.txt', 'r+') as f:
   lines = f.readlines()
   for i, line in enumerate(lines):
       if 'string' in line:
          lines.insert(i,"somedata")  # inserts "somedata" above the current line
   f.truncate(0)         # truncates the file
   f.seek(0)             # moves the pointer to the start of the file
   f.writelines(lines)   # write the new data to the file

或者不存储所有行,您需要一个临时文件来存储数据,然后 将临时文件重命名为原始文件:

import os
with open('input.txt', 'r') as f, open("new_file",'w') as f1:
   for line in f:
       if 'string' in line:
          f1.write("somedate\n")  # Move f1.write(line) above, to write above instead
       f1.write(line)
os.remove('input.txt')  # For windows only 
os.rename("newfile", 'input.txt')  # Rename the new file