我有一个代码,应该写一个文本文件,然后用一些其他东西替换一行中的一些文本。
def read(text):
file = open('File.txt', 'r+') #open the file for reading and writing
x = file.readline() # read the first line of the file
file.seek(0, 0) #put the pointer back to the begining
file.readline() #skip one line
file.write(text) #write the text
file.close() #close the file
read('ABC')
一开始很好。它读取第一行并设置指向文件开头的指针。但是当它应该读取一行并将指针放在第二行时,它将它放在文件的末尾。如果我将它分配给变量,它只读取一行,但它仍然将指针设置在文件的末尾。
显然readline()
并没有像我想象的那样工作,所以请告诉我如何阅读文本的某些部分并将内容写入特定行。
答案 0 :(得分:5)
默认情况下,写入始终发生在文件末尾。调用file.readline()
不会改变此行为,尤其是因为readline()
调用可以使用缓冲区来读取更大的块。
您可以明确使用file.seek()
来覆盖一行;你只需阅读该行,你知道它的长度,寻求这一点:
x = file.readline()
file.seek(len(x), 0)
file.write(text) #write the text
请注意,您无法插入线条或轻松替换线条。文件是单个字节的流,而不是行,因此如果您以10个字符(包括换行符)的行写入,则只能用10个其他字符替换该行。更长或更短的线路在这里不起作用;你只是要在文件中替换更少或更多的字符,并部分替换一行或覆盖下一行(部分)。