0

我正在使用 python 对文本文件进行一些操作。但是有一件事我还没有找到解决方案。我希望这里有人可以帮助我。

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

现在我想删除该order行中的单词和所有内容,但我不知道如何。文件中order声明的位置总是变化的,所以我不能指向某个位置并在之后删除所有内容。

4

3 回答 3

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() 
于 2013-10-02T10:47:09.633 回答
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")]

我将把更新的值写回去作为提问者的练习。

于 2013-10-02T09:52:58.950 回答
0
lines = "hello1OrderABC\nhello2OrderDEF".splitlines()
for line in lines:
  print line[:line.find("Order")]
------
hello1
hello2

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

于 2013-10-02T10:11:49.580 回答