一.文件
1.定义:文件是用于数据存储的单位,文件通常用来长期存储设置,文件的数据是以字节为单位进行顺序存储的。
2.文件操作:分为文本文件操作和二进制文件操作
3.文件打开模式
'r' #只读方式打开
'w' #只写方式打开,删除原文件的内容(若文件不存在,则创建文件并以只写的模式打开)
'x' #创建一个新文件,并以写的模式打开这个文件,若文件存在会产生"File
'a' #以只写模式打开,若有原文件则追加在原文件后面
'b' #以二进制模式打开
't' #以文本文件模式打开(默认)
'+' #为更新内容打开一个磁盘文件(可读可写)
#组合
'rt' #文本文件只读
'wt' #文本文件写入
'w+b' #可以实现二进制数随机读写,打开文件时,文件内容会被清理
'r+b' #以二进制和更新模式打开文件时,打开文件时不会清空文件内容
'r+' #以文本模式读和更新模式打开文件,打开文件时不会清空文件内容
二.文本文件(.txt)
说明:
(1)默认文件中存储的内容是字符数据,以行为单位读取,采用系统默认的换行符进行分隔(2)对于文本文件的读写,需要用字符串(str)进行读取和写入数据
文件读取
open(file_name,mode='rt')#打开一个文件,返回此文件对象,打开失败的话会触发IOError错误
file.readline()#读取一行数据,如果到达了文件尾部,则返回一个空字符串
file.readlines(max_chars=-1)#返回每行字符串的列表,max_chars为最后一行
f.read(size=-1)#从一个文件流中读取所有行,所有换行符自动变为'\n',指定size后最多读取size个字符
文件写入
f=open(file_name,mode='w'['a'])
f.write(text)#写入一行内容,text为字符串类型
f.writelines([text1,text2...])#写入一系列的字符串,但是不会自动换行,需要我们自己加上换行符
f.flush()#把缓存内容写入磁盘
下面示例 f. flush()的使用
f=open("text1.txt")
f.write("1111")
s=input("暂停一下")
#此时若没有输入,打开文件时会发现文件并没有写入“1111”,是因为这时1111只是在缓冲区,
#必须输入内容使s执行后才会写入到文件内。若换成下面的代码,则可以看到文件写入内容
f=open("text1.txt")
f.write("1111")
f.flush()
s=input("暂停一下")
三.二进制文件(.bin)
说明:
默认文件中存储的都是以字节为单位的二进制数据,对二进制文件的读写需要用到字节串
文件读取:
f=open(text.txt,'rb')
b=f.read()#返回字节串
c=f.readlines()#返回字节串列表
d=f.read(n)#n代表读取的字节数
s=b.decode('utf-8')#返回字符串
文件写入:
f=open('data.bin','wb')
s='听到请回答'
f.write(s.encode('utf-8'))#写入字节串
r=f.write(s.encode('utf-8'))#返回的是写入字节串的字节数,若以文本方式打开,则会返回写入字符串的字符数
文件操作方法:
f.tell()#返回当前文件流的绝对位置,在读文件时,光标会根据读取内容向后移动,所以需要知道当前所在位置
f.seek(offset,whence=0)#改变数据流的位置,返回新的绝对位置 offset为偏移量,大于0向文件末尾移动,小于0向文件头的位置移动,whence是相对位置,0代表从文件头开始移动,1代表从当前位置开始,2代表从文件尾部开始
f.readable()#判断文件是否可读
f.writeable()#判断文件是否可写
f.truncate(pos=None)#剪掉文件自pos之后的数据
四.标准输入输出文件
sys.stdin(),sys.stdout(),sys.stderr()
在每一个程序启动后都会有以上三个文件存在
import sys
sys.stdout.write('hello')#将内容写到了文件流,即stdout.py文件,显示在终端
sys.stdout.close()#关闭,如果再进行print操作会出错
import sys
sys.stderr.write('I am an error')#同上,内容写到了stderr文件,也会显示在终端
import sys
s=sys.stdin.read(n)#读取n个键盘操作,包括换行符
print(s)
s1=sys.stdin.read()#读取一次性的键盘操作,包括换行符,当输入ctrl+D时告诉系统键盘操作结束
print(s1)