Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python 2.7-在关闭文件之前将文本插入文件_Python 2.7 - Fatal编程技术网

Python 2.7 Python 2.7-在关闭文件之前将文本插入文件

Python 2.7 Python 2.7-在关闭文件之前将文本插入文件,python-2.7,Python 2.7,我正在将一些文本写入文件: import codecs outfile=codecs.open("c:/temp/myfile.sps","w+","utf-8-sig") #procedures for creating the text_to_write outfile.write (text_to_write) outfile.close() 现在,我想做的是在文件中插入一个额外的文本,总是在某一行,比如说第10行,但是这个额外的文本只有在完成所有创建文本的过程后才是最终的。因此,第10

我正在将一些文本写入文件:

import codecs
outfile=codecs.open("c:/temp/myfile.sps","w+","utf-8-sig")
#procedures for creating the text_to_write
outfile.write (text_to_write)
outfile.close()
现在,我想做的是在文件中插入一个额外的文本,总是在某一行,比如说第10行,但是这个额外的文本只有在完成所有创建文本的过程后才是最终的。因此,第10行插入附加文本的代码应该是最后一个代码:

是否可以在不关闭文件、重新打开然后再次保存的情况下执行此操作? ,但我想避免。我在找这样的东西:

import codecs
outfile=codecs.open("c:/temp/myfile.sps","w+","utf-8-sig")
#procedures for creating the text_to_write
outfile.write (text_to_write)
#code for inserting additional text at line 10
outfile.close()

由于您不知道插入点的确切位置(以字节为单位),因此需要读取文件内容的行,在第10行之后插入附加文本,然后再次写入文件

注意:Python2+3打开文件的方法是使用io模块而不是编解码器模块

例如,您需要编写以下文本和其他文本:

您可以打开该文件进行读写。如果文件不存在,则创建该文件 存在,否则将被截断。该流位于 文件的开头

with io.open("file.txt", mode="w+", encoding="utf-8-sig") as f:
    f.write(text_to_write)
    f.seek(0)
    lines = f.readlines()
    lines[10:10] = additional_text.splitlines(keepends=True)
    f.seek(0)
    f.writelines(lines)
这个解决方案不是很有效,因为你读的是你刚刚写的内容。 您还可以处理内存中的所有内容,然后写入文件

with io.open("file.txt", mode="w+", encoding="utf-8-sig") as f:
    f.write(text_to_write)
    f.seek(0)
    lines = f.readlines()
    lines[10:10] = additional_text.splitlines(keepends=True)
    f.seek(0)
    f.writelines(lines)
结果是:

|  1 | This
|  2 | 
|  3 | text
|  4 | 
|  5 | contains
|  6 | 
|  7 | at
|  8 | 
|  9 | least
| 10 | 
| ++ | ADDITIONAL
| ++ | TEXT
| 11 | ten
| 12 | 
| 13 | lines.
另一个使用内存中列表的解决方案:

lines = text_to_write.splitlines(keepends=True)
lines[10:10] = additional_text.splitlines(keepends=True)
with io.open("file2.txt", mode="w+", encoding="utf-8-sig") as f:
    f.writelines(lines)
您可能可以使用seek方法。然而,它是基于字节而不是行的,您可能不想覆盖您已经拥有的内容。