![](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)