Python:在特定字符后修改文本文件

时间:2013-10-02 09:48:46

标签: python

我正在使用python对文本文件进行一些操作。但有一点我找不到解决方案了。我希望有人可以帮助我。

在每行中的该文本文件中,我有单词order,之后是由,和数字组成的各种字符串。

现在我想要删除单词order以及该行中的所有内容,但我无法找到方法。文件中order所在的位置始终有所不同,因此我无法指向某个位置并在之后删除所有内容。

3 个答案:

答案 0 :(得分:1)

执行您想要的操作非常容易,因为您只删除部分文本,因此您可以使用“r +”模式重写您所读取的同一文件。

with open(filename,'r+') as fr,open(filename,'r+') as fw:
    for line in fr:
        x = line.find('order')
        fw.write(line if x==-1
                 else line[0:x]+'\n' if '\n' in line
                 else line[0:x])
    fw.truncate()

如果你的文件不是太大,那么可以完全读取并保存在RAM中,这是使用正则表达式的另一种方法:

import re

r = re.compile('(.*?)(?:order.*?$|\Z)',
               re.MULTILINE|re.DOTALL)

with open(filename,'r+') as f:
    x = f.read()
    f.seek(0,0)
    f.write(''.join(r.findall(x)))
    f.truncate() 

答案 1 :(得分:0)

逐行遍历文件(我假设你已经这样做了)然后使用string.find

>>> import string
>>> x = 'helloORDERme'  
>>> string.find(x,"ORDER")
5
>>> x[:string.find(x,"ORDER")]
'hello'

或者如果你真的需要知道这一点:

import string
with open('myfile', 'rU') as f:
  for line in f:
     print line[:string.find(line,"order")]

我将把更新后的值作为提问者留下来作为提问。

答案 2 :(得分:0)

lines = "hello1OrderABC\nhello2OrderDEF".splitlines()
for line in lines:
  print line[:line.find("Order")]
------
hello1
hello2

第一行创建一个行列表['hello1OrderABC','hello2OrderDEF']。其余的遍历此列表并打印出“Order”一词的所有内容。