2021-05-21PythonMOOC深圳信息文件操作
2021-05-21 本文已影响0人
爱生活的越仔
Python文件操作
写文本文件
案例:学生信息存储到文件
# -*- coding: utf-8 -*-
def getStudent(i):
print("输入第",i,'个学生信息')
try:
Name=input('姓名:')
if Name.strip()=='':
raise Exception('无效的姓名')
Gender=input('性别')
if Gender!='男' and Gender!='女':
raise Exception('无效的性别')
Age=float(input('输入年龄'))
if Age<=0 or Age>100:
raise Exception('无效的年龄')
s={}
s['Name']=Name
s['Gender']=Gender
s['Age']=Age
return s
except Exception as e:
print(e)
return None
if __name__=='__main__':
i=1
try:
with open('students.txt','wt') as file:
while True:
s=getStudent(i)
if s:
file.write(s['Name']+'\n'+s['Gender']+'\n'+str(s['Age'])+'\n')
i+=1
s=input("输入吗,Y or N?")
if s!='Y' and s!='y':
break
except Exception as e:
print(e)
6.2 读文本文件
案例:从文件读出学生信息
# -*- coding: utf-8 -*-
class Student:
def __init__(self,n,g,a):
self.name=n
self.gender=g
self.age=a
def show(self):
print(self.name,self.gender,self.age)
students=[]
try:
with open('students.txt','rt') as file:
while True:
name=file.readline().strip('\n')
if name=='':
break
else:
gender=file.readline().strip('\n')
age=float(file.readline().strip('\n'))
s=Student(name,gender,age)
students.append(s)
for i in students:
i.show()
except Exception as e:
print(e)
6.3 文件编码
案例:UTF-8 文件编码
def writeFile():
fobj = open("c:\\abc.txt", "wt",encoding="utf-8")
fobj.write("abc 我们")
fobj.close()
def readFile():
fobj = open("c:\\abc.txt", "rt")
rows=fobj.readlines()
for row in rows:
print(row)
try:
writeFile()
readFile()
except Exception as err:
print(err)
6.4 文件指针
案例:调整文件指针读写文件
def writeFile():
fobj = open("c:\\abc.txt", "wt+")
print(fobj.tell())
fobj.write("123")
print(fobj.tell())
fobj.seek(2, 0)
print(fobj.tell())
fobj.write("abc")
print(fobj.tell())
fobj.close()
def readFile():
fobj = open("c:\\abc.txt", "rt+")
fobj.write("我们")
fobj.seek(0, 0)
rows = fobj.read()
print(rows)
fobj.close()
try:
writeFile()
readFile()
except Exception as err:
print(err)
6.5 二进制文件
# -*- coding: utf-8 -*-
#两种方式写入文件,分别是二进制和文本
def writeFileA():
with open('A.txt','wb') as file:
file.write('abc我们'.encode('utf-8'))
def writeFileB():
with open('B.txt','wt',encoding='utf-8') as file:
file.write('abc我们')
def readFile(fileName):
with open(fileName,'rb') as fout:
data=fout.read()
for i in range(len(data)):
print(hex(data[i]),end=' ')
print()
#两种方式读取文件,分别是二进制和文本
def readFileA():
with open('A.txt','rb') as file:
fileA=file.read().decode('utf-8')
print(fileA)
def readFileB():
with open('A.txt','rt',encoding='utf-8') as file:
fileB=file.read()
print(fileB)
try:
writeFileA()
writeFileB()
#循环读取
readFile('A.txt')
readFile('B.txt')
readFileA()
readFileB()
except Exception as e:
print(e)
6.6 实践项目 教材记录管理
image.png
本章课后测试题目
执行后test.txt文件字节数大小:
# -*- coding: utf-8 -*-
import os
def save():
f = open("test.txt", "wt", encoding="gbk")
f.write("我abc\nxyz")
f.close()
save()
print(os.path.getsize('test.txt'))
在utf-8编码下,和gbk不一样
# -*- coding: utf-8 -*-
import os
def save():
f=open("test.txt","wt",encoding="utf-8")
f.write("我abc\nxyz")
f.close()
save()
print(os.path.getsize('test.txt'))
def save():
f=open("test.txt","wt")
f.write("abc\nxyz")
f.close()
def read():
f=open("test.txt","rt")
s=f.readline()
print(len(s))
f.close()
save()
read()
def save(s):
f = open("test.txt", "wt")
f.write(s["name"] + "\n")
f.write(s["sex"] + "\n")
f.write(s["age"] + "\n")
f.close()
def read():
f = open("test.txt", "rt")
name = f.readline().strip("\n")
sex = f.readline().strip("\n")
age = f.readline().strip("\n")
print(name)
print(sex)
print(age)
f.close()
s = {"name": "xxx", "sex": "male", "age": "20"}
save(s)
read()