[笔记] Python核心编程 第九章

文件有两个内建函数open()和file(),推荐用open(),file在Python3.x版本上已经被废弃

open(name[, mode[, buffering]])

name是包含要打开文件名字的字符串,它可以是相对路径,也可以是绝对路径
mode表示文件打开的模式,有'r','w','a','U'等等。'r'和'U'模式必须要求文件已经存在,'w'模式如果文件不存在会创建,如果存在会清空文件内容;'a'模式如果文件不存在也会创建文件,如果文件存在,会在文件的EOF之后追加内容。
buffering用于指示访问文件所采用的缓冲方式,0表示不缓冲,1表示只缓冲一行,任何大于1的数字表示使用给定值作为缓冲区大小,不提供该参数或者使用负值表示使用系统默认的缓冲机制。

文件模式 操作
r 以读方式打开
rU或者U 以读方式打开,同时提供通用换行符支持
w 以写的方式打开(必要时清空文件内容)
a 以追加模式打开(从EOF开始追加,必要时创建新文件)
r+ 以读写模式打开,文件必须已经存在
w+ 以读写模式打开,文件可以不存在,不存在时会自动创建新文件
a+ 以读写模式打开,行为模式参照a
rb 以二进制读模式打开
wb 以二进制写模式打开,参照w
ab 以二进制追加模式打开,参照a
rb+ 以二进制读写模式打开,参照r+
wb+ 以二进制读写模式打开,参照w+
ab+ 以二进制追加模式打开,参照a+

文件对象的访问模式

文件模式 操作
r 以读方式打开
rU或者U 以读方式打开,同时提供通用换行符支持
w 以写的方式打开(必要时清空文件内容)
a 以追加模式打开(从EOF开始追加,必要时创建新文件)
r+ 以读写模式打开,文件必须已经存在
w+ 以读写模式打开,文件可以不存在,不存在时会自动创建新文件
a+ 以读写模式打开,行为模式参照a
rb 以二进制读模式打开
wb 以二进制写模式打开,参照w
ab 以二进制追加模式打开,参照a
rb+ 以二进制读写模式打开,参照r+
wb+ 以二进制读写模式打开,参照w+
ab+ 以二进制追加模式打开,参照a+

注意:'b'不能作为第一个字符出现,即不能写成'br';另外对于所有POSIX兼容的Unix系统(包括Linux)来说,'b'是可以有可无的,因为它们把所有文件都当做二进制文件,包括文本文件,所以在POSIX兼容的系统下可以忽略'b';当然如果你要移植到其他非Unix系统,还是加上'b'比较好

通用换行符支持 UNS (Universal NEWLINES Support),会在通过Python的输入方法(例如read*())读取文件时将返回内容的各种换行符都替换成NEWLINES(\n),这个特性支持包含不同类型换行符的文件。但UNS只能用于读取文本文件。

文件的内建函数,read*()或者write*()都不会自动处理换行符,所以需要程序员自己处理。

为了提高可移植性,建议用os模块里的os.linesep来代替手动输入'\r','\n'之类的换行符。因为os.linesep就是当前系统的换行符。

file.seek(offset[, whence])这个内建方法可以在文件中移动文件指针到不同的位置。
offset代表相对于某个位置的字节偏移量。
whence表示偏移量的相对位置,有0,1,2三种常亮,默认为0,表示从文件开头计算偏移量,1表示从文件指针的当前位置计算,2表示从文件末尾算起。

文件对象方法 操作
file.close() 关闭文件
file.fileno() 返回文件的描述符(file descriptor,FD,整型值)
file.flush() 刷新文件的内部缓冲区
file.isatty() 判断file是否是一个类tty设备
file.next() 返回文件的下一行(类似file.readline()),或在没有其他行的时候引发StopIteration异常
file.read(size=-1) 从文件读取size个字节,当未给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回
file.readline(size=-1) 从文件中读取一行(包括换行符),或者返回最大size个字符
file.readlines(size=0) 读取文件的所有行并作为一个列表返回(包含所有的换行符);如果给定size且大于0,,那么将返回总和大约为size字节的行(大小由缓冲器容量的下一个值决定)(比如说缓冲器的大小只能为4K的倍数,如果size为15K,则最后返回的可能是16K)
file.seek(offset, whence=0) 在文件中移动文件指针,从whence(0表示文件起始,1表示当前位置,2表示文件末尾)偏移offset字节
file.tell() 返回当前文件指针在文件中的位置
file.truncate(size=file.tell()) 截取文件到最大size字节,默认为当前位置,截取之后会改变文件内容
file.write(str) 向文件中写入字符串
file.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

文件对象方法

文件对象方法 操作
file.close() 关闭文件
file.fileno() 返回文件的描述符(file descriptor,FD,整型值)
file.flush() 刷新文件的内部缓冲区
file.isatty() 判断file是否是一个类tty设备
file.next() 返回文件的下一行(类似file.readline()),或在没有其他行的时候引发StopIteration异常
file.read(size=-1) 从文件读取size个字节,当未给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回
file.readline(size=-1) 从文件中读取一行(包括换行符),或者返回最大size个字符
file.readlines(size=0) 读取文件的所有行并作为一个列表返回(包含所有的换行符);如果给定size且大于0,,那么将返回总和大约为size字节的行(大小由缓冲器容量的下一个值决定)(比如说缓冲器的大小只能为4K的倍数,如果size为15K,则最后返回的可能是16K)
file.seek(offset, whence=0) 在文件中移动文件指针,从whence(0表示文件起始,1表示当前位置,2表示文件末尾)偏移offset字节
file.tell() 返回当前文件指针在文件中的位置
file.truncate(size=file.tell()) 截取文件到最大size字节,默认为当前位置,截取之后会改变文件内容
file.write(str) 向文件中写入字符串
file.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

file.truncate()如果在打开文件之后立即调用,因为当前位置是0,所以调用truncate方法之后会清空文件

文件对象的属性 描述
file.closed 表示文件是否已经被关闭,未关闭返回False
file.encoding 文件所使用的编码——当Unicode字符串被写入数据时,它们将自动使用file.encoding转换为字节字符串;若file.encoding为None时使用系统默认的编码
file.mode 文件打开时使用的访问模式
file.name 文件名
file.newlines 为读取到换行符时为None,只有一种换行符时为一个字符串,当文件中有多种类型的换行符时,则为一个包含所有当前文件换行符的列表
file.softspace 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用

文件内建属性

文件对象的属性 描述
file.closed 表示文件是否已经被关闭,未关闭返回False
file.encoding 文件所使用的编码——当Unicode字符串被写入数据时,它们将自动使用file.encoding转换为字节字符串;若file.encoding为None时使用系统默认的编码
file.mode 文件打开时使用的访问模式
file.name 文件名
file.newlines 为读取到换行符时为None,只有一种换行符时为一个字符串,当文件中有多种类型的换行符时,则为一个包含所有当前文件换行符的列表
file.softspace 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用

Python提供了两个模块用来处理命令行参数——getopt和optparse,其中getopt模块较为简单

文件系统详见P221

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 一、文件对象 文件对象是Python代码访问、操作磁盘上文件的主要接口。文件对象不仅可以用来访问普通的磁盘文件,而...
    常大鹏阅读 1,933评论 0 9
  • 做CAD编辑器的都是知道给你一张图纸的话让你照着画是非常简单的一件事,下面这些图纸都是自己设计的图纸,是不能外传的...
    若即_2f24阅读 213评论 0 0
  • 这一周李笑来老师更新的概念是“希望”。 第一部分,分析一下李笑来的写作逻辑: 开篇就提出精通一项技能的作用:形成多...
    zishigzy阅读 315评论 0 1
  • 訂閱了好多專欄來不及看,除了資訊外,還是要回到怎麼樣踐行,可以讓自己真正成長? 而成長中最重要的是(每天的)心情!...
    繁花似錦微笑以對阅读 163评论 2 1
  • 这个世界异彩纷呈,这里的人也五光十色,没有谁可以成为谁。也没有谁可以决定谁。但我们经常去询问别人的建议,在...
    刘一首阅读 332评论 0 0