3

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

这是我到目前为止所做的事情:

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

我想ABXX, ONLY UNDER行替换,SAMPLE并且RUNS 我已经尝试了多种使用 replace() 的方法。我尝试了类似的东西

if  'SAMPLE' in line:  
f1.write(line.replace('testsample', 'XX'))  
if 'RUNS' in line:      
f1.write(line.replace('testsample', 'XX'))  

那没有用

4

2 回答 2

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
于 2013-06-02T03:11:47.523 回答
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  
于 2013-06-02T03:01:56.540 回答