文件:
什么是文件
文件是用于数据存储的单位文件通常用来长期存储设置
文件中的数据已字节为单位进行顺序存储的
长期存储介质:
磁盘 硬盘 U盘内存的读写速度快 磁盘的读写速度慢
文件的操作步骤:
打开文件读写文件
关闭文件
文件的打开函数open
open(file, mode='rt')用于打开一个文件,返回此文件流对象,如果打开失败会触发IOError错误
文件的关闭方法
F.close() 关闭文件,释放系统资源示例:
# 此程序示意文件的打开和关闭
try:
file=open(r'C:\Users\Administrator\Desktop\aaa.txt')
print('打开文件成功')
s = file.readline()
print(s)
# 关闭文件
file.close()
print('文件已关闭')
except IOError:
print('打开文件失败')
with open(r'C:\Users\Administrator\Desktop\aaa.txt') as f:
print(f.read())
文件操作分为两种类型的操作:
文本文件的操作二进制文件的操作
文本文件模式:
mode='t'1、默认文件中存储的内容为字符数据,以行为单位进行读取,采用系统默认的换行符进行分隔
2、对于文本文件的读写,需要用字符串(str) 进行读取和写入数据
各操作系统默认的换行符:
Linux 换行符 '\n'Windows 换行符 ‘\r\n'
旧的Macintosh 的换行符'\r'
新的Mac OS 换行符 '\n'
练习:
1、写一个程序,读入任意行的文字信息,当输入空时结束输入
将读入的字符串存于列表中,然后将列表里的内容写入文件input.txt中
def input_():
L = []
while True:
s = input('请输入:')
if not s:
break
L.append(s)
return L
def txt(L):
try:
f = open('input.txt', 'w')
for i in L:
f.write(i + '\n')
f.close()
print('文件写入完成')
except:
print('打开文件失败')
def main():
L = input_()
txt(L)
if __name__ == '__main__':
main()
2、写一个程序从input.txt中读取之前输入的数据,存入列表中,再加上行号进行打印显示
显示格式如下:
第1行:zzzzzzzz
第2行:wwwwwww
def read_input_file(filenaem='input.txt'):
try:
f = open(filenaem)
L = []
while True:
read_ = f.readline()
if not read_:
break
L.append(read_.rstrip())
f.close()
return L
except IOError as e:
print('打开文件失败', e)
def print_(L):
for i in enumerate(L, 1):
print('第%d行:%s' % i)
def main():
L = read_input_file()
print_(L)
if __name__ == '__main__':
main()
二进制文件操作
打开模式:'b' # open('xxx', 'b')
默认文件中存储的都是以字节为单位的二进制数据,通常有认为规定的格式,需要以字节为单位进行读写对二进制文件的读写,需要用字节串(bytes) 进行操作
F.read(n)方法
F.readline()
F.readlines()
对于二进制文件,F.read() / F.readline() 返回字节串F.readlines() 返回字节串列表
F.read(n) n代表最大字节数
F.write(x) 方法
对于二进制文件,x必须为字节串#aaa.txt内容:
百 度
新 浪
微 博
腾 讯
网 易
# 此示例示意二进制模式读取mynote.py文件
try:
f = open ('aaa.txt','rb')
print('打开文件成功')
b=f.read()
print('字节串:',b)
print('转码后',b.decode('utf-8'))
f.close()
except IOError as e:
print('打开文件失败',e)
# 此程序示意以二进制方式打开文件后进行写操作
f = open('mydata.bin', 'wb') # <<< 'wb'二进制写模式
print('文件打开成功')
f.write(b'hel\nlo') # 写入五个字符
s = '我是汉字'
r = f.write(s.encode('utf-8')) # 将中文字符串转为字节串 r: 二进制方式打开返回字节数,以文本方式打开返回字符数
print('写入:', s, ',共写入', r, '个字节')
f.close()
# number.bin内容
ABCDE12345abcde67890
# 此示例示意tell方法的用法
f = open('number.bin', 'rb') # 二进制方式打开
print('刚打开时的文件流位置为:', f.tell())
b = f.read(5)
print('读出五个字节后文件流位置为:', f.tell())
f.close()
F.seek(offset, whence=0) 函数
offset 偏移量:大于0的数代表向文件末尾方向移动
小于0的数代表向文件头方向移动
whence 相对位置
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
示例:
# 此示例示意seek方法的用法
# number.bin 内容为:
# ABCDE12345abcde67890
f = open('number.bin', 'rb')
f.read(5)
# f.seek(10, 0) #从文件头向后10个
f.seek(-10, 2) # 从文件尾向前10个
# f.seek(5, 1) #当前向后5个
b = f.read(5)
print(b)
f.close()
汉字编码:
国标系列:
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解释执行器当前文件的编码是什么