python文件读写
Python操作文件的基本语法格式:
with open(r'文件路径',mode='文件操作模式',encoding='utf8') as f:
文件具体操作代码
注意:
1.其中变量名是指向打开文件的句柄(可以任意替换为其他有效变量名)
2.文件路径可以是相对路径,也可以是绝对路径。
3.open方法只能用于读取txt、csv等文本文件,不能读取word、excel等第三方文件,第三方文件必须用专门的库才能操作。#读取一个文件中的信息,并打印出来
with open('../day01/d' ,mode='r',encoding='utf8') as file:
print(file.read())
#自动创建一个文件,并写入一段文字
with open('2.txt', mode="w", encoding='utf8') as f:
f.write("爱哭的复活节卡萨丁咖啡机看看水电费")
#这是接收列表格式,写入大量数据时,速度较快
f.writelines(["haidknfjoasnkdlfjo asdjf asndfj kaldsjf knasjk fnalds fasd f"])
#读取一个文件中的信息,并打印出来
with open('2.txt',mode='r+' ,encoding='utf8') as file:
print(file.read())
常用文件的读取方式
f.read() # 一次性读取所有文件内容
f.read(100)#读取参数指定的字符长度
f.readline() #读取一行内容,如果指定数字则只读取一行中指定的字符数
f.readlines() #按行读取全部内容到一个列表中
for line in f:# 直接通过一个循环来读取文件
文件操作模式:
r只读
r+读并更新
w 覆盖写入 根据文件名称判断文件是否存在,不存在会自动创建文件(只创建在当先目录下)
a追加写入
以w模式打开文件
写数据的几种方法(如果要换行必须自己添加换行符)
以字符串形式写入:
f.write(“要写入的字符串”)
以列表形式写入:
f.writelines(list_of_text_strings)
注意,在写入大量内容时,调用writelines写入多行在性能上会比使用write一次性写入要高
练习题
1、定义一个模块(xxx.py的文件)
模块里面具有三个类
厨师类:炒菜方法
服务员类:接待客人方法 送走客人方法
收银员类:收钱方法
实现:客人来-->服务员接待-->客人点菜-->厨师炒菜-->客人吃完了-->收银员收钱-->服务员送客
class Waiter(object):
def __init__(self,num,diancai,money):
self.num = num
self.diancai = diancai
self.money = money
def Jiedai(self):
return f"接待了{self.num}客人,客人点了{self.diancai}"
def Songke(self):
return "服务员送客"
class Chushi(Waiter):
def chaocai(self):
return f"厨师炒了{self.diancai}"
class Shouqian(Waiter):
def __init__(self, fq, num, diancai,money):
super().__init__(num, diancai,money)
self.fq = fq
def Sq(self):
return f"客人吃完,给了{self.fq}元,找零{self.fq-self.money}"
a = Chushi(2,"松子鳜鱼",1000)
b = Shouqian(2000,2,"松子鳜鱼",1000)
print(a.Jiedai(),'\n',a.chaocai(),b.Sq(),a.Songke())
2、解释面向对象中的几个重要概念
类:类就是对具有相同属性的一种描述
对象:类的实例化,对象可以调用类下的属性和方法
实例属性:用init 构造方法去定义的
实例方法:就是普通的函数,括号中是(self)
类属性:直接定义在类下的变量
类方法:需要加 @classmethod 装饰器,区别是类方法的括号中是cls (cls)
self 和 cls关键字:
self是实例方法的隐藏参数,可以通过self进行实例属性和方法值之间的来回调用
cls是类方法的隐藏参数,可以通过self进行类属性和方法值之间的来回调用
3、使用面向对对象的方式实现,模拟一个注册和登录的场景用户注册时,需要输入账号和密码,保存账号与密码。在登录时,我们去验证输入的账号与密码,是否是已经注册,已经注册提示已注册可以登陆, 未注册提示无法登陆未注册。
class zhuche:
def __init__(self,user_name,pass_word):
self.u_name=user_name
self.u_pass=pass_word
def zc(self):
a=(self.u_name,self.u_pass)
print(f'注册成功,账号密码是{a}')
class Login(zhuche):
def __init__(self,name,pwd,user_name,pass_word):
super().__init__(user_name,pass_word)
self.name=name
self.pwd=pwd
def dl(self):
a=(self.u_name,self.u_pass)
b = (self.name,self.pwd)
if a[0]==b[0] and a[1]==b[1]:
print('已经注册,登陆成功')
elif a[0]==b[0] and a[1]!=b[1]:
print('账号正确,密码错误,登录失败')
elif a[0]!=b[0] and a[1]==b[1]:
print('账号错误,密码正确,登录失败')
else:print('账号密码都错误')
yy=Login(user_name = 'user001',pass_word = 123456, name= 'ssss',pwd = 123456)
yy.dl()
4、使用类的方式实现一个聊天记录保存功能,不断获取用户输入信息,保存到'log.txt'文件并读取文件内容。
class bclt:
def baoc(self):
while True:
ms = input("请输入聊天内容:")
if ms != "结束":
with open('log.txt', mode='a', encoding='utf8') as f:
f.write(ms)
else :
break
def read(self):
with open('log.txt', mode='r', encoding='utf8') as f2:
print(f2.read())
b = bclt()
b.baoc()
b.read()
匿名函数
语法:变量名= lambda 参数名1,参数名2,参数名3: 参数名的代码
创建一个匿名函数,实现两个数相乘
a = lambda x,y:x*y
print(a(10,200))
两个输出的结果一致
def hs(x,y):
return x * y
print(hs(1,33))