python学习笔记(十六)文件操作
操作流程
打开文件读写文件关闭文件流程示例:```python # 打开文件 fp = open('00-test.txt', mode='r') # 读取内容 content = fp.read() print(content) # 关闭文件 fp.close() 1234567891011 打开文件
函数:open
参数:
file:需要打开的文件的路径 mode:打开模式 12
模式 说明
r只读方式,若文件不存在则报错 w只写方式,若文件不存在则会创建,文件存在则会清空 a追加方式,文件不存在则会创建,文件存在则打开(内容不会清空) r+在r模式下添加写的权限 w+在w模式下添加读的权限 a+在a模式下添加读的权限 在上面的打开方式后添加一个字符'b',表示文件的读写是是字节串(bytes)进行的,于是又有了6中打开文件的方式,分别为:rb、wb、ab、rb+、wb+、ab+ 1234567 encoding:编码方式
编码 说明
ASCII美国信息交换标准代码(128) ANSI扩展的ASCII(256) GB2312中国的ANSI GBK扩充的GB2312 unicode万国码,将所有国家的字符全部进行编码 utf-8是一种可变长度的unicode编码方案,对中文支持比较友好 123456 文件操作
读、写、查看操作位置、设置操作位置,判断读写权限等
fp = open('00-test.txt', 'ab+') # 判断是否可读 if fp.readable(): # 读取指定长度内容 # print(fp.read(5)) # print(fp.read(5)) # 读取全部内容 # print(fp.read()) # 读取一行内容 # print(fp.readline(), end='') # print(fp.readline()) # 读取所有的行,得到一个列表,每个元素都是一行的内容 # print(fp.readlines()) # 返回文件操作位置 print(fp.tell()) # 是否可以设置文件操作位置 print(fp.seekable()) # 修改文件操作位置 # 参数1:偏移量 # 参数2:参考位置,0表示开头,1表示当前位置,2表示文件末尾 # 若想任意设置偏移,打开模式需要添加'b',以字节串进行操作 fp.seek(-10, 2) print(fp.tell()) print(fp.read(5)) else: print('没有读取权限') # 判断是否可写 if fp.writable(): print('可写') # fp.write(b'hello') else: print('没有写入权限') fp.close()
123456789101112131415161718192021222324252627282930313233343536 IO模块示例
from io import StringIO, BytesIO # fp = open('xxx.yyy') sio = StringIO() # 写入内容 sio.write('hello') print(sio.tell()) # 设置偏移 sio.seek(0, 0) # 读取内容 print(sio.read()) # 获取所有内容 print(sio.getvalue())
1234567891011121314151617' CSV文件说明:Comma Separated Values
写入:
import csv # 打开文件,newline=''可以防止插入空行 fp = open('test.csv', 'w', newline='') # 创建一个写的对象 writer = csv.writer(fp) # 写入一行 writer.writerow(['姓名', '学号', '年龄', '成绩']) # 写入多行 rows = [ ['建启', 123, 23, 85], ['双柱', 456, 23, 80], ] writer.writerows(rows) # 关闭文件 fp.close()
1234567891011121314151617181920'读取:
fp = open('test.csv') # 创建读的对象 reader = csv.reader(fp) # for row in reader: # # 每次读取一行的数据,返回值是一个列表 # print(row) rows = [row for row in reader] print(rows) fp.close() 12345678910111213 pickle
说明:可以将对象保存到文件中
示例:
import pickle class Person: def __init__(self, name, age): self.name = name self.age = agedef __str__(self):return 'name:{} age:{}'.format(self.name, self.age) xiaoming = Person('xiaoming', 18) # 序列化:将对象转换为bytes类型 # s = pickle.dumps(xiaoming) # print(s) # 反序列化:将bytes转换为对象 # xm = pickle.loads(s) # print(xm, type(xm)) # 保存到文件 fp = open('data.txt', 'wb') # s = pickle.dumps(xiaoming) # fp.write(s) # 等价于上面两步 pickle.dump(xiaoming, fp) fp.close() # 从文件中读取 # fp = open('data.txt', 'rb') # s = fp.read() # xm = pickle.loads(s) # 等价于上面两步 # xm = pickle.load(fp) print(xm) fp.close()
123456789101112131415161718192021222324252627282930313233343536373839 JSON说明:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。
示例:
import json d = {'name': 'dahua', 'age': 18} # fp = open('data.json', 'w') # 将字典转换为JSON字符串 # s = json.dumps(d) # fp.write(s) # 等价于上面两步 # json.dump(d, fp) # print(s, type(s)) fp = open('data.json', 'r') # s = fp.read() # 将JSON字符串转换为字典 # d2 = json.loads(s) # 等价于上面两步 d2 = json.load(fp) print(d2, type(d2)) fp.close()
12345678910111213141516171819202122 with语句说明:特定场景指某个操作的环境,即上下文,如:文件操作上下文,一定是在文件打开关闭之间进行操作。
with:针对有上下文的情况,可以简化结束上下文的书写操作
示例:
# fp = open('xxx.yyy') # 在文件上下文中进行文件操作 # fp.read() # fp.write() # 最后一定要保证文件关闭,无论有没有异常 # fp.close() # with open('xxx.yyy') as fp: # pass # 文件读写操作 # 不用关心文件的关闭操作,语句结束后会自动进行 # print('OVER') class Person: def __init__(self): print('__init__')# 进入上下文 def __enter__(self): print('__enter__')# 退出上下文 def __exit__(self, exc_type, exc_val, exc_tb): print('__exit__') print('异常类型:', exc_type) print('异常信息:', exc_val) print('异常追溯:', exc_tb) with Person() as p:print('上下文中执行操作')raise Exception('出现异常') print('OVER')
123456789101112131415161718192021222324252627282930313233343536相关知识
python学习笔记(十六)文件操作
科学网—为什么生态学家要学习Python或者R?
Python机器学习基础教程
TensorFlow学习记录(八)
【Python】基础
python 花卉识别系统 用python搭建一个花卉识别系统(IT技术)
SKYNE/python
花了1个月时间,把Python库全部整理出来了,覆盖所有,建议收藏
Python常见的错误以及其解决方案
[机器学习基础][笔记] 一、鸢尾花分类
网址: python学习笔记(十六)文件操作 https://m.huajiangbk.com/newsview124910.html
上一篇: 平常送家人什么花合适 |
下一篇: 花卉风格ppt |