1

前のコンテンツを削除せずに、n 番目のバイトの後にファイルに追加する必要があります。

たとえば、「He​​llo World」を含むファイルがあり、
position(5) を検索して「this」を書き込む場合、
「Hello this world」を取得する必要があります。

ファイルを開くモードはありますか??

現在、私のコードは文字
を置き換え、「Hello thisd」を提供します

>>> f = open("1.in",'rw+')
>>> f.seek(5)
>>> f.write(' this')
>>> f.close()

助言がありますか?

4

3 に答える 3

6

ファイルでできる方法はありませんinsert。通常行われることは次のとおりです。

  1. 古いファイルとコンテンツを追加する新しいファイルの 2 つのバッファを用意します。
  2. 新しいコンテンツを挿入するポイントまで、古いものから新しいものへコピーします
  3. 新しいファイルに新しいコンテンツを挿入する
  4. 古いバッファから新しいバッファへの書き込みを続行します
  5. (オプション) 古いファイルを新しいファイルに置き換えます。

Python では、次のようになります。

nth_byte = 5
with open('old_file_path', 'r') as old_buffer, open('new_file_path', 'w') as new_buffer:
    # copy until nth byte
    new_buffer.write(old_buffer.read(nth_byte))
    # insert new content
    new_buffer.write('this')
    # copy the rest of the file
    new_buffer.write(old_buffer.read())

今、あなたは持っている必要がありHello this worldますnew_buffer。その後、古いものを新しいもので上書きするか、それで何をしたいかを決めるのはあなた次第です。

お役に立てれば!

于 2013-09-16T23:34:01.127 に答える
1

mmapを使用して、次のようなことができます。

import mmap

with open('hello.txt', 'w') as f:
    # create a test file
    f.write('Hello World')

with open('hello.txt','r+') as f:
    # insert 'this' into that 
    mm=mmap.mmap(f.fileno(),0)
    print mm[:]
    idx=mm.find('World')
    f.write(mm[0:idx]+'this '+mm[idx:])

with open('hello.txt','r') as f:  
    # display the test file  
    print f.read()
    # prints 'Hello this World'

mmap可変文字列のように扱うことができます。ただし、スライスの割り当ては長さと同じでなければならないなど、制限があります。mmap オブジェクトで正規表現を使用できます。

つまり、文字列をファイル ストリームに挿入するには、文字列を読み取り、読み取ったデータに文字列を挿入して、書き戻す必要があります。

于 2013-09-17T06:26:51.110 に答える
1

あなたがしたいことは、ファイルを読み取り、2 つのチャンクに分割してから書き直すことだと思います。何かのようなもの:

n = 5
new_string = 'some injection'

with open('example.txt','rw+') as f:
    content = str(f.readlines()[0])
    total_len = len(content)
    one = content[:n]
    three = content[n+1:total_len]
    f.write(one + new_string + three)
于 2013-09-16T23:37:37.583 に答える