![](https://tva1.sinaimg.cn/large/0081Kckwgy1glkxwrngbuj30cd0bdjrm.jpg) ![](https://tva1.sinaimg.cn/large/0081Kckwgy1glku2mzqevj30et0e9jrz.jpg) ### 1.1 python读文件--逐行读入 * **open的使用** 读写各种不同的文本数据,如ASCII,UTF-8,UTF-9编码等。 使用带有rt模式的open()函数读取文本文件:`f = open('test.txt', 'r')` 如果文件不存在,open()函数就会抛出一个***IOError***的错误,并且给出错误码和详细的信息告诉你文件不存在: `FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'` 文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:`f.close()` 但是每次都这么写实在太繁琐,所以,python引入了with语句来自动帮我们调用close()方法: ```python with open('test.txt', 'r') as f: print(f.read()) * **read的使用** python文件对象提供了三个"读"方法: read()、readline() 和 readlines(),每种方法可以接受一个变量以限制每次读取的数据量。 1. read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。 2. readlines() 之间的差异是后者一次读取整个文件,类似.read() 。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。 3. readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。 ***注意:这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,可以使用str.strip()去掉。*** ### 1.2 python linecache模块缓存--读取大文件指定行 * linecache.getline(filename, lineno[, module_globals]) ,这个方法从filename也就是文件中读取内容,得到第 lineno行,注意没有去掉换行符,它将包含在行内。 * linecache.clearcache() ,清除现有的文件缓存。 * linecache.checkcache([filename]) ,参数是文件名,作用是检查缓存内容的有效性,可能硬盘内容发生了变化,更新了,如果不提供参数,将检查缓存中所有的项。 ------ ## 2 python写文件 * **open的使用** 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件: ```python f = open('test.txt', 'w') # 若是'wb'就表示写二进制文件 f.write('Hello, world!') f.close() ***注意:'w'这个模式:如果没有这个文件,就创建一个;如果有,那么就会先把原文件的内容清空再写入新的东西。所以若不想清空原来的内容而是直接在后面追加新的内容,就用'a'这个模式。*** 若不想使用f.close(),可以选择用with语句: ```python with open('test.txt', 'w') as f: f.write('Hello, world!') * **write的使用** python文件对象提供了两个"写"方法: write() 和 writelines()。 1. write()方法和read()、readline()方法对应,是将字符串写入到文件中。 2. writelines()方法和readlines()方法对应,也是针对**列表**的操作。它接收一个**字符串列表**作为参数,将他们写入到文件中,**换行符不会自动的加入**,因此,需要显式加入换行符。 ## 3 格式化写入--使用%格式化 * **整数输出** **%o** —— *oct* 八进制 **%d** —— *dec* 十进制 **%x** —— *hex* 十六进制 * **浮点数输出** **%f** ——保留小数点后面六位有效数字,例:%.3f,保留3位小数位 **%e** ——保留小数点后面六位有效数字,指数形式输出,例:%.3e,保留3位小数位,使用科学计数法 **%g** ——在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法,例:%.3g,保留3位有效数字,使用小数或科学计数法 * 字符串输出 主要使用**%s** **%10s**——右对齐,占位符10位 **%-10s**——左对齐,占位符10位 **%.2s**——截取2位字符串 **%10.2s**——10位占位符,截取两位字符串 f = open('test.txt','w+') #数字格式化写入 strr0 = '%10d %10.2f' % (9510442,78.96) fd.write(strr0) #字符串格式化写入 strr1 = '%10s %10s %10s \n' % ('ID','Name','Record') f.write(strr1) f.close() 【参考文章】[python之linecache使用](https://www.cnblogs.com/misswangxing/p/7921740.html) 【参考文章】[python文件的格式化写入](https://blog.csdn.net/weixin_33672109/article/details/89795375) 【参考文章】 [python基础格式化输出(%用法和format用法)](https://www.cnblogs.com/qinchao0317/p/10699717.html) 【参考文章】[Python 读写文件](https://www.cnblogs.com/programer-xinmu78/p/10661170.html) 【参考文章】[python文件操作及格式化输出](https://www.cnblogs.com/xiaoming279/p/6372860.html)