Answers:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
print("appended text", file=myfile)
对于更熟悉的api也是可能的。
open()
不硬编码utf-8
。它使用locale.getpreferredencoding(False)
。encoding="utf-8"
如果知道文件使用utf-8编码,则显式传递参数。
您需要通过将“ a”或“ ab”设置为附加模式以附加模式打开文件。参见open()。
当您以“ a”模式打开时,写入位置将始终位于文件的末尾(附加)。您可以使用“ a +”打开以允许读取,向后搜索和读取(但所有写入仍将在文件末尾!)。
例:
>>> with open('test1','wb') as f:
f.write('test')
>>> with open('test1','ab') as f:
f.write('koko')
>>> with open('test1','rb') as f:
f.read()
'testkoko'
注意:使用'a'与以'w'打开并搜索到文件末尾不一样-考虑如果另一个程序打开文件并开始在搜索和写入之间进行写操作,会发生什么情况。在某些操作系统上,使用'a'打开文件可确保将所有后续写入原子地附加到文件末尾(即使文件随着其他写入的增长而增加)。
有关“ a”模式如何运行的更多详细信息(仅在Linux上测试过)。即使您回头,每次写操作也会追加到文件末尾:
>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'
实际上,该手册fopen
页指出:
以追加模式(模式的第一个字符)打开文件会导致对该流的所有后续写入操作在文件末尾发生,就像在调用之前一样:
fseek(stream, 0, SEEK_END);
with
):示例:(在实际程序中用于with
关闭文件 -请参阅文档)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
close()
吗?
with
-参见docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
我总是这样做
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
这很简单,但是非常有用。
f
变量传递给其他函数,打开文件的同一函数也应将其关闭。该with
语法是完成这一任务的首选方式。
您可能希望将其"a"
作为mode参数传递。请参阅文档open()。
with open("foo", "a") as f:
f.write("cool beans...")
模式参数还有其他排列方式,用于更新(+),截断(w)和二进制(b)模式,但是从公正开始"a"
才是最好的选择。
file
阴影内置函数。不要将其用于变量。
file
不再是Python 3中的内置函数。即使在Python 2中,也很少使用它。打开文件是一种常见的操作。file
在Python 2和3上都可以在这里使用name。知道何时不一致。
Python在主要的三种模式之外有许多变体,这三种模式是:
'w' write text
'r' read text
'a' append text
因此,将其附加到文件就像:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
还有一些模式可以使您的代码减少行数:
'r+' read + write text
'w+' read + write text
'a+' append + read text
最后,还有二进制格式的读/写模式:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
您也可以使用print
代替write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
如果test.txt不存在,它将被创建...
WRITE_TO_FILE = open('my_file.txt', mode='a')
,然后在程序执行过程中可以进行多次打印print('Hello world', file=WRITE_TO_FILE)
,只要您决定在控制台上查看输出,只需将标志更改为即可WRITE_TO_FILE = None
。如果没有,请不要忘记最后关闭文件None
如果要附加到文件
with open("test.txt", "a") as myfile:
myfile.write("append me")
我们声明了该变量myfile
以打开名为的文件test.txt
。Open有两个参数,一个是我们要打开的文件,另一个是代表我们要对该文件执行的权限或操作的字符串。
这是文件模式选项
模式说明 'r'这是默认模式。打开文件进行读取。 'w'此模式打开文件进行写入。 如果文件不存在,它将创建一个新文件。 如果文件存在,它将截断该文件。 'x'创建一个新文件。如果文件已经存在,则操作失败。 'a'以追加模式打开文件。 如果文件不存在,它将创建一个新文件。 't'这是默认模式。它以文本模式打开。 'b'以二进制模式打开。 '+'这将打开一个文件,用于读写(更新)
该'a'
参数表示追加模式。如果您不想with open
每次都使用,则可以轻松编写一个函数来帮您:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
如果您想写结尾以外的其他地方,可以使用'r+'
†:
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
最终,该'w+'
参数赋予了更大的自由度。具体来说,它允许您创建文件(如果不存在)以及清空当前存在的文件的内容。
将更多文本附加到文件末尾的最简单方法是使用:
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
将a+
在open(...)
声明中指示打开追加模式的文件,允许读取和写入访问。
使用file.close()
完后,关闭所有打开的文件也是一种好习惯。
这是我的脚本,基本上计算行数,然后追加,然后再对它们进行计数,这样您就可以证明它起作用了。
shortPath = "../file_to_be_appended"
short = open(shortPath, 'r')
## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to"
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines initially" %(long_path,i)
long.close()
long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l:
try:
l = short.next() ## when you run out of lines, this breaks and the except statement is run
c += 1
long.write(l)
except:
l = None
long.close()
print "Done!, wrote %s lines" %c
## finally, count how many lines are left.
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()