##language:zh ''' 文章来自《Python cookbook》. 翻译仅仅是为了个人学习,其它商业版权纠纷与此无关! ''' -- 61.182.251.99 [<>] <> = 描述 = 写文件 Credit : Luther Blissett == 问题 == 文件中写入文本或2进制数据 ? == 解决 Solution == 将一个(大)字符串写入文件的最简单的方法如下: {{{ #!python open('thefile.txt', 'w').write(all_the_text) # 写入文本到文本文件 open('abinfile', 'wb').write(all_the_data) # 写入数据到2进制文件 }}} 更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,文本文件写入内容: {{{ #!python file_object = open('thefile.txt', 'w') file_object.write(all_the_text) file_object.close( ) }}} 写入文件的内容更多时不是一个大字符串,而是一个字符串的'''list'''(或其他序列),这时应该使用'''writelines'''方法(此方法同样适用于2进制文件的写操作) {{{ #!python file_object.writelines(list_of_text_strings) open('abinfile', 'wb').writelines(list_of_data_strings) }}} 使用'''writelines'''方法, 相对于使用'''string'''的'''join'''方法产生一个大字符串然后写入文件或者循环调用'''write'''方法,运行要快许多。 == 讨论 == 打开文件以写入,除了文件名外,必须提供第2个参数, '''w''' : 打开文本文件以供写入 '''wb''' : 打开2进制文件以写入 在食谱4.2 :读文件中的讨论同样适合于写文件。特别的是,强烈建议文件写操作时'''显式关闭文件''',只有关闭文件才能保证数据确实已经写到了硬盘上而不在内存的临时缓冲区中。 向文件中每次写入一部分对比于从文件中一次读取一部分操作更普通,也没有太多的问题。 可以多次使用'''write'''和(或)'''writelines''', 只要欲写入的字符串或者字符串list准备完毕了。每次写入操作在文件末尾已写入内容之后附加新的数据。 当写文件处理结束后,使用文件对象的'''close'''方法关闭文件。 如果同时拥有欲写入的全部数据,那么调用简单的'''writelines'''方法更快更简单。 否则,如果每次只能获得欲写入的数据一部分,那么每次调用'''write'''操作和建立一个临时'''list'''存储欲写入数据最后调用writelines相比,至少一样简单一样快。 考虑'''块操作'''(全部读出,全部写入)和'''微量操作'''(每次读取一行,每次写入一部分)上的效率,文件的读写操作很不同。 == 参考 See Also == 食谱 4.2:读文件 http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d4_2d2 Python 文档内置函数'''open'''和'''file''' 对象部分