-
文件 file
什么是文件
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节(byte)为单位进行存储的
文件的操作流程:
1.打开文件
2.读/写文件
3.关闭文件
注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制
文件的打开函数:
open(file,mode = 'rt')
用于打开一个文件,返回此文件对应的文件流对象,如果打开失败则会触发OSError错误
文件的关闭方法:
F.close #关闭文件,释放系统资源
示例;
#此示例示意文件的打开和关闭及读取文本信息的操作
try:
# f = open('myfile.txt') #打开文件
f = open('/home/tarena/桌面/python笔记/code/myfile.txt')
print('文件打开成功')
#读写文件
s = f.readline() #读取一行 s = 'abcd\n'
print('len(s)',len(s),'内容是:',s)
s = f.readline() #再读取一行
print('len(s)',len(s),'内容是:',s)
s = f.readline() #对第三行
print('len(s)',len(s),'内容是:',s)
f.close()
print("文件已关闭")
except OSError:
print('文件打开失败!')
文本文件的操作:
文本文件的模式字符't'
说明:
对文本文件的读写需要用字符串str进行读取和写入数据
默认文件中存储的都是字符(文字)数据,在读写中会自动进行编码转换操作
以行为单位分隔,在python内统一用'\n'作用用换行符进行分隔
各操作系统的换行符:
linux 换行符 '\n'
window 换行符 '\r\n'
旧的macintosh 换行符 '\r'
新的mac os 换行符 '\n'
文件流对象常用的方法:
python_base_docs_html/文件.html
练习:
自己写一个文件,'info.txt' 内部存储一些文字信息如下:
张三 20 100
李四 21 96
小王 20 98
注:
以上信息用空格作为分隔符隔开
写程序将这些数据读取出来,并以如下格式打印出来:
张三 今年 20 岁,成绩是:100
李四 今年 21 岁,成绩是:96
小王 今年 20 岁,成绩是:98
def read_info_txt():
rl = []
try:
f = open('info.txt')
print('打开文件成功')
l = f.readlines()
for line in l :
s = line.strip() #消去两边的空白字符
name,age,score = s.split() #
age = int(age) #转为整数
score = int(score)
rl.append({'name':name,
'age':age,
'score':score})
#返回列表
f.close()
print('文件关闭')
return rl
except OSError:
print('读取文件失败!')
def print_info(l):
for d in l:
print(d["name"],'今年',d['age'],'岁,成绩是:',d['score'])
l = read_info_txt()
print_info(l)
文本文件读方法:
f.readline()
f.readlines()
f.read(字符数或字节数)
文本文件的写方法:
模式字符串:'w''x''a'
f.write(字符串)
f.writlines(字符串列表)
示例:
# f = open('newfile')
#默认是不写第二个参数默认是:f = open('newfile','rt')
try:
# f = open('newfile.txt','wt') #失败抛出异常错误通知
f = open("newfile.txt",'w')
# f = open("newfile.txt",'x') #如果原文件存在则报错
# f = open("newfile.txt",'a') #追加
print('打开成功')
#在此处进行写文件的操作
f.write('hello')
f.write('world')
f.writelines(['123','abc'])
f.close()
print('关闭文件成功')
except OSError:
print('创建文件失败')
文件的迭代读取:
文件流对象是可迭代对象,迭代过程将以换行符'\n'作为分割符依次获取
示例:
f = open('myfile.txt','rt')
for line in f:#绑定的文件流对象是可迭代对象
print(line)
练习:
1.写程序,读入任意行文字,当输入空行时结束输入
先将这些读入的文字存入列表中
让后再将列表中的额文字存入到'input.txt'文件和
2.写程序,从上题的imput.txt中读取之前输入的数据,读取到列表中,在加上行号进行输出
def input_txt():
l = []
while True:
i = input("请输入:")
if i == '':
break
l.append(i)
return l
def list_to_file(lst,filename = 'input.txt'):
'''将字符串的列表,保存在filename文件中'''
try:
fw = open(filename,"w")
for i in lst:
#把s绑定的字符串写入到input.txt中
fw.write(i)
fw.write('\n')#写入换行符 来区分行
fw.close()
except OSError:
print("写入文件失败")
l = input_txt()
list_to_file(l)
def read_from_file(filename = 'input.txt'):
l = []
try:
fr = open(filename,'rt')
for line in fr:
s = line.rsplit() #去掉右边的换行符
l.append(s)
fr.close()
print('读取文件成功')
except OSError:
print("打开文件失败")
return l
def print_text(lst):
for line_numble,s in enumerate(lst,1):
print(line_numble,":",s)
if __name__ == "__main__":
print_text(read_from_file())
标准输入输出文件:
sys.stdin 标准输入文件 (默认为键盘设备)
sys.stdoutt 标准输出文件(默认为屏幕终端)
sys.stderr 标准错误输出文件(默认为屏幕终端)
模块名:sys
说明:
1.标准文件不需要打开和关闭就可以使用
2.每一个python程序启动后都会有以上三个文件供我们使用
示例:
import sys
# ctrl + d 快捷键让键盘输入标准结束符
s = sys.stdin.read()
print(s)
# sys.stdin.close() #关闭标准输入文件则input函数就不能用了
s2 = input('请输入:')
print(s2)
二进制文件操作:
模式字符: 'b'
默认文件中存储的都是以字节为单位的数据,通常有人为的格式
对二进制文件的读写需要用字节串(bytes)进行操作
常用的操作方法:
f.read([字节数/字符数])
对于文本文件,f.read()返回类型为字符串str
对于二进制文件,f.read()返回类型为字节串bytes
f.write()
同上,对二进制文件,写入的数据为字节串或字节数组
f.tell()方法
返回当前的文件流的读写位置(从0开始,以字节为单位)
f.seek方法
作用:
设置文件的读写位置
格式:
f.seek(偏移量,whence = 相对位置)
偏移量
大于0代表向文件尾方向移动
小于0代表向文件头方向移动
相对位置:
0代表从文件头开始偏移
1代表从当前位置开始偏移
2代表从文件尾开始偏移
示例:
f = open('20.txt','rb')
b = f.read(3)
print(b)
pos = f.tell() #返回读写位置
print('当前的读写位置是:',pos)
b2 = f.read(1)
print('读一个字节后的读写位置是:',f.tell())
# f.seek(5,0) #代表从文件头向后移动5个字节
# f.seek(2,1) #代表从当前位置向后移动2个字节
f.seek(-15,2) #代表从文件尾向前移动15个字节
b = f.read(10)
print(b)
f.close()