我正在使用 python 对文本文件进行一些操作。但是有一件事我还没有找到解决方案。我希望这里有人可以帮助我。
在该文本文件的每一行中,我都有单词order
,然后是由,
和 数字组成的各种字符串。
现在我想删除该order
行中的单词和所有内容,但我不知道如何。文件中order
声明的位置总是变化的,所以我不能指向某个位置并在之后删除所有内容。
我正在使用 python 对文本文件进行一些操作。但是有一件事我还没有找到解决方案。我希望这里有人可以帮助我。
在该文本文件的每一行中,我都有单词order
,然后是由,
和 数字组成的各种字符串。
现在我想删除该order
行中的单词和所有内容,但我不知道如何。文件中order
声明的位置总是变化的,所以我不能指向某个位置并在之后删除所有内容。
做你想做的事情非常容易,因为你只删除了部分文本,所以你可以用“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()
逐行遍历文件(我假设您已经这样做了)然后使用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")]
我将把更新的值写回去作为提问者的练习。
lines = "hello1OrderABC\nhello2OrderDEF".splitlines()
for line in lines:
print line[:line.find("Order")]
------
hello1
hello2
第一行创建一个行列表 ['hello1OrderABC', 'hello2OrderDEF']。其余的遍历这个列表并打印出所有单词“Order”。