机器人 救救瓜
Toggle navigation
Home
SCM-tool
Linux
Jenkins
SVN
other
About Me
Archives
Tags
python 笔记之 文件操作
? python ?
2021-03-10 17:11:35
1310
0
0
gua_l
? python ?
函数open的参数mode的最常见取值 |值 |描 述| |-|-| |'r'| 读取模式(默认值)| |'w' |写入模式| |'x' |独占写入模式| |'a' |附加模式| |'b' |二进制模式(与其他模式结合使用)| |'t' |文本模式(默认值,与其他模式结合使用)| |'+'| 读写模式(与其他模式结合使用)| 显式地指定读取模式的效果与根本不指定模式相同。写入模式让你能够写入文件,并在文件不存在时创建它。 独占写入模式更进一步,在文件已存在时引发FileExistsError异常。在写入模式下打开文件时,既有内容将被删除(截断),并从文件开头处开始写入; 如果要在既有文件末尾继续写入,可使用附加模式。 '+'可与其他任何模式结合起来使用,表示既可读取也可写入。例如,要打开一个文本文件进行读写,可使用'r+'。(你可能还想结合使用seek,详情请参阅本章后面的旁注“随机存取”。)请注意,'r+'和'w+'之间有个重要差别:后者截断文件,而前者不会这样做。默认模式为'rt'. 每当调用f.write(string)时,你提供的字符串都将写入到文件中既有内容的后面。 ``` >>> f = open('somefile.txt', 'w') >>> f.write('Hello, ') 7 >>> f.write('World!') 6 >>> f.close() ``` 读取也一样简单,只需告诉流你要读取多少个字符(在二进制模式下是多少字节),如下例所示: ``` >>> f = open('somefile.txt', 'r') >>> f.read(4) 'Hell' >>> f.read() 'o, World! ``` f.read() 读取了文件中**余下的全部内容** ### 三个标准流 模块sys的一节中,提到了三个标准流。 sys.stdin 一个标准数据输入源是sys.stdin。当程序从标准输入读取时,你可通过输入来提供文本,也可使用管道将标准输入关联到其他程序的标准输出. sys.stdout 提供给print的文本出现在sys.stdout中,向input提供的提示信息也出现在这里。写入到sys.stdout的数据通常出现在屏幕上,但可使用管道将其重定向到另一个程序的标准输入。 sys.stderr 错误消息(如栈跟踪)被写入到sys.stderr,但与写入到sys.stdout的内容一样,可对其进行重定向。 ### 随机存取 可在文件中移动,只访问感兴趣的部分(称为随机存取)。为此,可使用文件对象的两个方法:seek 和 tell。 方法 seek(offset[, whence])将当前位置(执行读取或写入的位置)移到 offset 和whence 指定的地方。参数 offset 指定了字节(字符)数,而参数 whence 默认为 io.SEEK_SET(0),这意味着偏移量是相对于文件开头的(偏移量不能为负数)。参数 whence 还可设置为 io.SEEK_CUR(1)或io.SEEK_END(2),其中前者表示相对于当前位置进行移动(偏移量可以为负),而后者表示相对于文件末尾进行移动。请看下面的示例: ``` >>> f.read() # read(不带参数将读到尾) 'test1234test123456798765432198765432112345' >>> f.read() # 再次read()因为到末尾了读了空 '' >>> f.tell() # tell 指出当前末尾读取位置距开头的偏移量 42 >>> f.seek(4) # 将当前读取位置指到“距开头的偏移量为4的位置” 4 >>> f.tell() # tell 指出当前读取位置距开头的偏移量为4 4 >>> f.read() #read(不带参数将读到尾),从4位置读到尾 '1234test123456798765432198765432112345' >>> f.tell() # tell 指出当前末尾读取位置距开头的偏移量为上方的42 42 ``` ### 上下文管理器 要确保文件得以关闭,可使用一条try/finally语句,并在finally子句中调用close。 ``` try: # 将数据写入到文件中 finally: file.close() ``` 实际上,有一条专门为此设计的语句,那就是with语句。 ``` with open("somefile.txt") as somefile: do_something(somefile) ``` with语句让你能够打开文件并将其赋给一个变量(这里是somefile)。在语句体中,你将数据写入文件(还可能做其他事情)。到达该语句末尾时,将自动关闭文件,即便出现异常亦如此。 with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:**__enter__**和**__exit__**。 方法**__enter__**不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。 方法**__exit__**接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果**__exit__**返回False,将抑制所有的异常。文件也可用作上下文管理器。它们的方法**__enter__**返回文件对象本身,而方法**__exit__**关闭文件。 ### 文件 基本操作 read() readline() readlines() write() writelines(list) #### 迭代文件 使用read迭代字符 ``` with open(filename) as f: for char in f.read(): process(char) ``` 使用readlines迭代行 ``` with open(filename) as f: for line in f.readlines(): process(line) ``` 使用fileinput迭代行 ```import fileinput for line in fileinput.input(filename): process(line) ```
Pre:
python 笔记之 python 断言 并行迭代 pass、del和exec ,exec 和 eval
Next:
python 笔记之 模块
0
likes
1310
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.