发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的。
使用 open 函数来打开文件,语法如下:
open
open(name[, mode[, buffering]])
open 函数除了必须提供的文件名参数外,其实还有一个 mode 的模式参数,如果没有指定参数值的话,它的默认值是: r。mode参数的可选值如下:
mode
r
1 'r' 读模式 2 'w' 写模式 3 'a' 追加模式 4 'b' 二进制模式(可添加到其他模式使用) 5 '+' 读/写模式(可添加其他模式使用)
open 函数的第三个参数( buffering ),表示文件的缓冲,当缓冲区大于0时(等于0时无缓冲,所有的读写操作都直接针对硬盘),Python会将文件内容存放到缓冲区(内存中),从而是程序运行的的更快,这时,只有使用 flush 或者 close 时才会将缓冲区中的数据更新到硬盘中。
buffering
flush
close
文件流最重要的功能就是读取和写入数据。对应于文件对象来说就是: read 和 write 方法。
read
write
三种标准的流:
标准文件对象包括 sys 模块的:stdin,stdout 以及 stderr 都是类文件对象,该对象实现了UNIX标准的I/O机制(Windows 中也能使用)。
每次调用 f.write(string) 时,所提供的string参数值,会被写入到文件中(但是调用这个方法之前文本的内容会被覆写掉)。如下:
f.write(string)
1 f = open(r'C:\text.txt','w') 2 f.write('hello,') 3 f.write('world') 4 f.close()
写入更多内容
通过使用 f.writelines 方法,将一个字符串列表(任何序列或可迭代对象)作为参数,即可把这些内容写入到文件(流)中。
f.writelines
注意:使用 writelines 方法不会增加新行,写入流的方法中也没有对应的 writeline 方法,需要自己增加新行。(不同平台使用不同的换行符,如 Mac 使用 r,Windows 使用 \r\n。可以通过 os.linesep 来获取)。
writelines
writeline
\r\n
os.linesep
更新文件内容
写入了一些文件内容后,这些内容不一定能够理解体现在文件中,因为数据可能被缓存在内存中了,知道关闭时才会被真正写入到文件,如果想要在文件关闭前立即对文件内容进行更新,可以考虑调用文件对象的 flush 方法(该方法不允许其他程序使用该文件的同时访问文件)。
调用 f.read([charCount]) 读取文件内容,根据可选的读取字符数读取文件内容,如果不指定参数则读取还没有被读取过的内容,如下:
f.read([charCount])
1 # -- coding: utf-8 -- 2 f = open(r'C:\text.txt','r') # mode = 'r',默认值 3 4 # 读取4个字符 5 print f.read(4) # hell 6 print f.read() # o,world 7 f.close()
当我们使用完文件对象后应该及时把它关闭掉,以节省系统资源,或者保证文件完整性。这时候我们可以使用 try/finally 语句来完成,通过在 finally 语句中调用 f.close() 方法,确保文件会被关闭:
try/finally
finally
f.close()
1 # -- coding: utf-8 -- 2 # 打开文件 3 f = open(r'C:\text.txt','w') 4 5 try: 6 # 写入文件 7 f.write('hello,') 8 f.write('world') 9 finally: 10 # 关闭文件 11 f.close()
除了使用 finally 语句来关闭文件,还可以使用 Python 2.5 之后引入的新语法—— with语句 来关闭文件:
with语句
1 # -- coding: utf-8 -- 2 3 # with 语句体中的代码执行结束后,文件会被自动关闭(即使发生了异常) 4 with open(r'C:\text.txt','w') as f: 5 f.write('hello,') 6 f.write('world')
读取更多内容
f.read([charCount]) 是逐字节读取的,我们还可以使用更简便的方法: f.readline([charCount]) ,如果不适用任何参数直接读取单独的一行(从当前位置开始,知道一个换行符为止),如果使用一个非负数的整数作为参数,表示可以读取字符的最大值。f.readlines()方法可以读取一个文件中所有的行,并将其作为列表返回。
f.readline([charCount])
f.readlines()
对文件内容进行迭代以及执行一些重复的操作,是最常见的文件操作之一。
最常见的对文件内容进行迭代的方式是在 while 循环中使用 read 方法:
while
1 f = open(r'C:\text.txt','r') 2 3 char = f.read(1) 4 while char: 5 print char 6 char = f.read(1) 7 f.close()
当文件达到末尾是,read 方法会返回一个空字符串,则 char 是 false。上面的示例还有可以使用 while true/break 语句实现更简洁的写法:
char
false
while true/break
1 # -- coding: utf-8 -- 2 f = open(r'C:\text.txt','r') 3 4 while True: 5 line = f.read(1) 6 if not line:break 7 print line 8 f.close()
按行读取的方式和按字节的方式类似,只需要将 read 方法换成了 readline 方法即可:
readline
1 # -- coding: utf-8 -- 2 f = open(r'C:\text.txt','r') 3 4 while True: 5 line = f.readline() 6 if not line:break 7 print line 8 f.close()
对于一个不是很大的文件,我们可以使用不带参数的 read方法一次性的读取整个文件(当作一个字符串),或者使用 readlines方法把文件读入一个字符串列表中,列表中每个字符串就是一行。下面使用 read 方法读取所有内容:
readlines
1 f = open(r'C:\text.txt','r') 2 3 for char in f.read(): 4 print char 5 f.close()
使用readlines方法读取所有内容:
1 f = open(r'C:\text.txt','r') 2 3 for line in f.readlines(): 4 print line 5 f.close()
对文件内容进行按需加载,而不是一次性的将其从读到内存的中好处之一就是可以按需加载,节省系统资源,特别是对一些超大的文件来说更是如此。如果对大文件进行迭代操作可以考虑下面的两种方式:
使用fileinput实现惰性迭代
需要对一个非常大的文件进行迭代时,使用 readlines 会占用过多的内存,这时候除了可以用 while 循环和 readline 来替代,还可以通过使用 for 循环和 fileinput 模块来实现懒惰迭代——即按需迭代:
for
fileinput
1 import fileinput 2 3 for line in fileinput.input(r'C:\text.txt'): 4 print line
使用文件迭代器
从Python 2.2 开始,文件对象是可迭代的,这表示可以直接在 for 循环对它们进行迭代操作:
1 f = open(r'C:\text.txt') 2 for line in f: 3 print line 4 f.close()
Python Doc —— fileinput
Python基础教程(第二版)
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
Python学习入门之异常处理机制
当程序执行到第2句时发现try语句,进入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句,找到except语句后,会调用自定义的异常处理器,except将异常处理完毕后,程序继续往下执行...
Python with 关键字 | 菜鸟教程
finally 实例 file = open(''''''''./test_runoob.txt'''''''', ''''''''w''''...
python处理异常的方式有几种?
在Python语言中,python异常处理机制主要依赖try、except、else、finally和raise五个关键字。默认则说明是解释器默认做出的行为,如果解释器发现异常,并且我们没有对异常进行任何预防,那么程序在执行...
python如何进行异常处理
程序执行到第2句时发现try语句,进入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句。finally语句表示,无论异常发...
Python入门学习之异常处理机制
else代码块不是必须的,它只有在需要依赖于try代码块成功执行时才需要。try-except-else代码块的工作原理:python尝试执行try代码块中的片段1代码,片段1的代码应该是只有可能引发异常的代码,不会引发...
强悍的Python——读取大文件
强悍的Python——读取大文件这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。(1)readlines() :读取全部的行,构成一个 li...
Python文件读写read()方法实例解读
Python文件读写read()方法实例解读。#程序解读:打开文件ceshi1.txt,读取的字节数可以选择,打印输出字符串内容,然后关闭文件。ceshi1...
Python:try...except...else...finally语句
Python:try...except...else...finally语句1、在Python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如:...
Python注释代码的方法
Python注释代码的方法。很多人都在使用Python软件,不过有不少用户还不知道Python如何注释代码?接下来,小编就为各位带来了Python注释代...
微信扫码,在手机上查看选中内容