python核心笔记--第九章 文件操作

来源:互联网 发布:魔豆宝宝小屋淘宝店 编辑:程序博客网 时间:2024/05/18 00:40

1. 文件对象的访问模式:

文件模式操作r以读方式打开rU 或 Ua以读方式打开,同时提供通用换行符支持w以写方式打开(必要时清空)a以追加模式打开(从EOF开始,必要时创建新文件)r+以读写模式打开w+以读写模式打开a+以读写模式打开rb以二进制读模式打开wb以二进制写模式打开ab以二进制追加模式打开rb+以二进制读写模式打开wb+以二进制读写模式打开ab+以二进制读写模式打开  

2. 核心笔记:保留行分隔符

当使用输入方法如 read() 或者 readlines() 从文件中读取行时, Python 并不会删除行结束符. 这个操作被留给了程序员. 例如这样的代码在 Python 程序中很常见:
f = open('myFile', 'r')
data = [line.strip() for line in f.readlines()]
f.close()
类似地, 输出方法 write() 或 writelines() 也不会自动加入行结束符. 你应该在向文件写入数据前自己完成。


3. 文件迭代

       一行一行访问文件很简单

for eachLine in f:

        在这个循环中,eachLine代表文本文件中的一行(包括末尾的行结束符),可以使用它做任何想做的事。

        在python 2.2之前,从文件中读取行的最好办法是使用file.readlines()来读取所有数据,这样程序员可以尽快释放文件资源,如果如果不需要这样做, 那么程序员可以调用 file.readline()一次读取一行. 曾有一段很短的时间, file.xreadlines() 是读取文件最高效的方法。

        在 Python 2.2 中, 我们引进了迭代器和文件迭代, 这使得一切变得完全不同, 文件对象成为了它们自己的迭代器, 这意味着用户不必调用 read*() 方法就可以在for 循环中迭代文件的每一行。另外我们也可以使用迭代器的 next 方法, file.next() 可以用来读取文件的下一行. 和其它迭代器一样, Python 也会在所有行迭代完成后引发 StopIteration 异常.所以请记得, 如果你见到这样的代码, 这是"完成事情的老方法", 你可以安全地删除对readline() 的调用。

for eachLine in f.readline():
               :
        文件迭代更为高效, 而且写(和读)这样的 Python 代码更容易. 如果你是 Python 新人, 那么请使用这些新特性, 不必担心它们过去是如何.


4. 行分隔符和其它文件系统的差异

       操作系统间的差异之一是它们所支持的行分隔符不同. 在 POSIX (Unix 系列或 Mac OS X)系统上, 行分隔符是 换行符 NEWLINE ( \n ) 字符. 在旧的 MacOS 下是 RETURN ( \r ) , 而 DOS 和Wind32 系统下结合使用了两者 ( \r\n ). 检查一下你所使用的操作系统用什么行分隔符。另个不同是路径分隔符(POSIX 使用 "/", DOS 和 Windows 使用 "\", 旧版本的 MacOS 使用":"), 它用来分隔文件路径名, 标记当前目录和父目录.当我们创建要跨这三个平台的应用的时候, 这些差异会让我们感觉非常麻烦(而且支持的平台越多越麻烦)。幸运的是 Python 的 os 模块设计者已经帮我们想到了这些问题. os 模块有五个很有用的属性. 它们被列在了表 9.2 中.


Table 9.2 有助于跨平台开发的 os 模块属性
os 模块属性 描述
linesep 用于在文件中分隔行的字符串
sep 用来分隔文件路径名的字符串
pathsep 用于分隔文件路径的字符串
curdir 当前工作目录的字符串名称
pardir (当前工作目录的)父目录字符串名称

不管你使用的是什么平台, 只要你导入了 os 模块, 这些变量自动会被设置为正确的值, 减少
了你的麻烦.



还要提醒大家的是: print 语句默认在输出内容末尾后加一个换行符, 而在语句后加一个逗号就可以避免这个行为. readline() 和 readlines() 函数不对行里的空白字符做任何处理(参见本章练习), 所以你有必要加上逗号. 如果你省略逗号, 那么显示出的文本每行后会有两个换行符, 其中一个是输入是附带的, 另个是 print 语句自动添加的.


原创粉丝点击