iGMAS Innovation Application Center
@School of Geodesy and Geomatics, Wuhan University
Menu
Home
Products
Visualization
Group
Software
Feedback
Sign In
Group
学术动态
团队风采
研究方向与代表成果
GNSS轨道钟差
实时精密定位
低轨增强GNSS
多源融合导航
GREATers
Tools and PPT
Group
学术动态
团队风采
研究方向与代表成果
GNSS轨道钟差
实时精密定位
低轨增强GNSS
多源融合导航
GREATers
Tools and PPT
GREATers
Return
python读写文件、格式化写入
Create on
2020-12-12T04:02:47Z
written by Wang Qingyun
## 1 python读文件 首先介绍文件IO的基本操作。   ### 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)