目录:
文件操作
文件:
什么是文件
- 文件是用于数据存储的单位
- 文件通常用来长期存储设置
- 文件中的数据是以字节为单位进行顺序存储的
文件的缺点
内存的读写速度快/ 磁盘的读写速度慢
文件的操作步骤:
- 打开文件
- 读写文件
- 关闭文件
文件的打开函数 open
格式:
open(file, mode=’rt’) 用于打开一个文件,返回此文件流对象,如果打开失败会触发IOError错误文件的关闭方法
F.close() # 关闭文件,释放系统资源示例见:
# 此程序示意文件的打开和关闭 file = open("mynote.txt") print("打开文件成功") # 通常在此进行读写文件内容 # 关闭文件 file.close() print("文件已关闭")
文件操作分为两种类型的操作:
- 文本文件操作
- 二进制文件操作
文本文件模式:
- 打开模式:mode = ‘t’
- 默认文件中存储的内容为字符数据,以行为单位读取,采用系统默认的换行符进行分隔
- 对于文本文件的读写,需要用字符串(str) 进行读取和写入数据
各操作系统默认的换行符:
环境 | 换行符 |
---|---|
Linux | ‘\n’ |
Windows | ‘\r\n’ |
旧的Macintosh | ‘\r’ |
新的Mac OS | ‘\n’ |
练习:
- 将如下数据用文本编辑器sublime 写入到data.txt文件中
数据如下:
小张 13888888888
小李 13999999999
小赵 13666666666 - 写程序读取数据,打印出姓名和电话号码,格式如下:
姓名: 小张, 电话: 13888888888
练习:
写一个程序,读入任意行的文字信息,当输入空行时结束输入.
将读入的字符串存于列表中,然后将列表里的内容写入的文件 input.txt 中写一个程序, 从input.txt中读取之前输入的数据,存入列表中.再加上行号进行打印显示
显示格式如下 :
第1行: zzzzzzz
第2行: xxxxxxx
答案见:
file_read.py
# 此程序示意文件的打开时的错误处理 try: file = open("mynote.txt") print("打开文件成功") # 通常在此进行读写文件内容 s = file.readline() print("第一行内容是: ", s) # 关闭文件 file.close() print("文件已关闭") except IOError: print("文件打开失败")
write_data.py
try: f = open("mydata.txt", 'w') # 以只写的方法打开文件 print("打开文件成功") f.write("我是第一行数据\n") f.write("我是第二行数据\n") f.writelines(['我是第三行\n', '我是第四行\n', 'five']) f.close() except IOError: print("打开文件失败")
二进制文件操作
- 打开模式 : ‘b’
默认文件中存储的都是以字节为单位的二进制数据,通常有人为规定的格式,需要以字节为单位进行读写
对二进制文件的读写,需要用字节串(bytes)进行操作 方法
- F.read(n) 方法
read(n) n代表最大字节数 - F.readline()
- F.readlines()
对于二进制文件,F.read()/F.readline返回字节串
F.readlines() 返回字节串列表 - F.write(x)方法
对于二进制文件,x必须为字节串 F.seek(offset, whence=0) 函数
- offset 偏移量:
大于0的数代表向文件末尾方向移动
小于0的数代表向文件头方向移动 whence 相对位置
0:代表从文件头开始偏移
1: 代表从当前位置开始偏移
2: 代表从文件尾开始偏移示例见:
# 此示例示意seek方法的用法 f = open('alpha_number.bin', 'rb') # 二进制读 b = f.read(5) # f.seek(10, 0) f.seek(-10, 2) # f.seek(5, 1) b = f.read(5) print(b) f.close()
- offset 偏移量:
- F.read(n) 方法
汉字编码:
国标系列:
编码名 | 作用 |
---|---|
GB18030 | (2字节或4字节编码,共27533个) |
GBK | (2字节编码,共21003个) |
GB2312 | (2字节编码,共6763个汉字)(常用于Windows) |
国际标准:
编码名 | 作用 |
---|---|
UNICODE16/UNICODE32 <<<—>>> UTF-8 | (常用于Linux / Mac OS X / IOS / Android) |
UTF-8(8-bit Unicode Transformation Format)
编码字符串:
‘gb2312’
‘gbk’
‘gb18030’
‘utf-8’
‘ascii’
用于 encode和 decode方法中
编码注释:
在源文件的第一行或第二行写入如下格式的内容
# -- coding:gbk --
或
# -- coding:utf-8 --
是告诉python3解释执行器当前文件的编码是什么
练习:
修改原来的学生管理系统的代码,将其为分模块
建议:- 把显示菜单放在一个模块内
- 把对学生的操作放在一个模块内
- 把主事件循环while True 选择输入放在一个模块内
在菜单上添加两个功能:
| 9) 保存学生信息到文件(si.txt) |
| 10) 从文件中读取数据(si.txt) |
建议用逗号”,”分隔数据:
# file: si.txt
xiaozhang,21,98
xiaoli,22,100
…
标准输入输出文件\
- 文件
sys.stdin
sys.stdout
sys.stderr
模块名: sys - 说明:
每一个python程序启动后都会有以上三个文件已经打开供我们使用 示例见:
# 此程序示意标准输出sys.stdout 和标准错误输出 sys.stderr import sys # 导入sys模块 sys.stdout.write("hello world\n") # 等同于 print('hello world', end='\n') # 以下程序会出错 # sys.stdout.close() # print("程序结束!") sys.stderr.write("我的出现是个错误!\n")
# 此示例示意sys.stdin的用法 import sys print("请输开始输入:") # s = sys.stdin.read(10) # 默认从键盘获取数据 # print(s) # s2 = sys.stdin.read(10) # print(s2) s = sys.stdin.read() print("您刚才输入的是:", s)
Linux下 Ctrl + D输入文件结束符