UserPreferences

PyCkBk-4-3


文章来自《Python cookbook》.

翻译仅仅是为了个人学习,其它商业版权纠纷与此无关!

-- 61.182.251.99 [2004-09-20 08:17:12]

  1. 描述
    1. 问题
    2. 解决 Solution
    3. 讨论
    4. 参考 See Also

描述

写文件

Credit : Luther Blissett

问题

文件中写入文本或2进制数据 ?

解决 Solution

将一个(大)字符串写入文件的最简单的方法如下:

  1 
  2 
    open('thefile.txt', 'w').write(all_the_text)  # 写入文本到文本文件
    open('abinfile', 'wb').write(all_the_data)    # 写入数据到2进制文件

更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,文本文件写入内容:

  1 
  2 
  3 
    file_object = open('thefile.txt', 'w')
    file_object.write(all_the_text)
    file_object.close(  )

写入文件的内容更多时不是一个大字符串,而是一个字符串的list(或其他序列),这时应该使用writelines方法(此方法同样适用于2进制文件的写操作)

  1 
  2 
    file_object.writelines(list_of_text_strings)
    open('abinfile', 'wb').writelines(list_of_data_strings)

使用writelines方法, 相对于使用stringjoin方法产生一个大字符串然后写入文件或者循环调用write方法,运行要快许多。

讨论

打开文件以写入,除了文件名外,必须提供第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 文档内置函数openfile 对象部分