我需要在第n个字节后追加而不删除之前的内容。
例如,
如果我有一个文件包含:“Hello World”
我试图将(5)写成“这个”我应该得到
“你好这个世界”
有没有我应该打开文件的模式??
目前我的代码替换了字符
并给出“Hello thisd”
>>> f = open("1.in",'rw+')
>>> f.seek(5)
>>> f.write(' this')
>>> f.close()
有什么建议吗?
答案 0 :(得分:5)
你无法在文件中insert
。通常做的是:
在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
。在那之后,由你决定是否用新的或用你想做的任何东西覆盖旧的。
希望这有帮助!
答案 1 :(得分:1)
我认为你想要做的是读取文件,将其分成两个块,然后重写它。类似的东西:
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)
答案 2 :(得分: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对象上使用正则表达式。
底线,要将字符串插入文件流,您需要读取它,将字符串插入读取数据,然后将其写回。