0

Pythonでテキストファイルに対していくつかの操作を行っています。しかし、まだ解決策を見つけることができなかったことが1つあります。ここの誰かが私を助けてくれることを願っています。

そのテキスト ファイルのすべての行に単語が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
lines = "hello1OrderABC\nhello2OrderDEF".splitlines()
for line in lines:
  print line[:line.find("Order")]
------
hello1
hello2

最初の行は、行のリスト ['hello1OrderABC', 'hello2OrderDEF'] を作成します。残りはこのリストを繰り返し処理し、「Order」という単語まですべてを出力します。

于 2013-10-02T10:11:49.580 に答える
0

ファイルを1行ずつ繰り返し(すでにこれを行っていると思います)、次を使用します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 に答える