1.读文件
模式 | 含义 |
---|---|
file.readall | 读入整个文件 |
file.read(size=-1) | 从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流 |
file.readline (size=-1) | 从文件中读入一行内容,如果给出参数,读入前size长度的字符串或字节流 |
file.readlines(hint=-1) | 从文件中读入所有行,以每行元素形成一个列表,如果给出参数,读入hint行 |
打开文件
路径 :相对路径:(你的程序在哪里运行) 绝对路径:直接copy absolute path *在windows的文件绝对文件路径前加 r 防止 \ 产生歧义 ,因为 \ 本身有换行的意思*
内置函数open的模式(mode):
r:只读模式,文件不存在时抛出异常 t:文本文件模式 rb.表示读取文件原始的二进制(r:read 读;b:binary二进制) rt.能够读取文本内容
#打开文件(打开已经创建好的文件)
file_object=open('读文件',mode='rb')#返回路径二进制
#b'\xe5\xa4\xa7\xe5\xae\xb6\xe5\xa5\xbd\r\n\xe6\x88\x91\xe6\x98\xaf\xe9\xbd\x90\xe6\x96\x87\xe9\x9d\x99'
file_object=open('读文件',mode='rt',encoding='utf-8') #返回文本内容
#读取文件内容,赋值给data
data=file_object.read()
text=data.decode('utf-8') #也可以提取文本内容
print(text)
#关闭文件
file_object.close()
print(data)
如果文件不存在就会报错
那么我们可以来写一段判断文件是否存在的代码
import os #查询绝对路径
exists=os.path.exists('文件名')
print(exists)
#如果文件存在返回:ture 文件不存在:false
2.写文件
Python提供了3个与文件内容有关的方法
函数模式 | 功能 |
---|---|
file.write() | 向文件中写入字符串或字节流,并返回字符的数目 |
file.writelines() | 向文件中写入一个字符序列 |
file.write()函数
with open("D:\data2.txt","w") as file:
num=file.write("hello python\n Everyday is new")
print("向文件中写入%d个字符"(num))
#这时会creat一个data2的文件,文本内容为:
hello python
Everyday is new
#write()每次写入后并不会主动换行,而是在上次写入的数据之后继续写入数据,想要写入一行的数据,可以在末尾添加换行符"\n"
向data1.txt之后追加新内容
str=input("请输入内容:")
with open("data1.txt","a",encoding="utf-8") as file:
file.write("\n")
numb=file.write(str)
print("向文件中追加字符%d个"%(numb))
file.writelines()函数
str=['当蜘蛛网无情地查封了我的炉台,\n','当灰烬的余烟叹息贫困的悲哀']
with open("data3.txt","a",encoding='utf-8') as file:
file.writelines(str)
print("写入字符序列成功!")
打开文件
路径:
t1.txt (实现创建好的文件)
内置函数open的模式:
wb(要求写入的内容是字节类型(二进制))
w:覆盖写模式,文件不存在自行创建,存在则覆盖 t:创建写模式,文件不存在则创建,存在则抛出异常 a:追加写模式,文件不存在则创建;存在则在文件最后追加内容
#打开文件
file_object=open("t1.txt",mode='wb')
#2.写入内容
file_object.write("这里的山路十八弯".encode("utf-8"))
#==注意:写入时是utf-8 下次打开也是utf-8==
file_object=open("t2.txt",mode='wt',encoding='utf-8')
#如果原来没有文件t2.txt会自行creat一个
file_object.write("我的青春小鸟一去不回来")
#关闭文件
file_object.close()
#图片文件
f1=open("a1.png",mode='rb')
content=f1.read()
f1.close()
f2=open('a2.png',mode='wb') #会自动creat一个a2.png的文件内容与a1.png一致
f2.write(content)
f2.close
3.文件读写位置
方法 | 说明 |
---|---|
file.tell() | 返回文件指针的当前位置 |
file.seek(offset,from) | 改变当前文件操指针的位置,offset代表偏移量,form的值:0,文件开头;1,文件位置;2,文件结尾 |
str='中国人民解放军JIEFANG'
with open("data3.txt","w") as fw:
fw.write(str)
with open("data3.txt","r") as fr:
print(fr.read(1))
fr.seek(0)
print(fr.read(1))
fr.seek(2)
print(fr.read(1))
print(fr.tell())
print(fr.seek(5,0))#相对于文件开头进行偏移
4. 案例
案例一:用户注册
user=input("请输入用户名:")
pwd=input("请输入密码:")
data="{}-{}".format(user,pwd) #拼接字符串
file_object=open("files/info.txt",mode="wt",encoding="utf-8")
#在files中找一个info.txt的文件,如果文件不存在自行创建
file_object.write(data)
file_object.close()
案例二:多用户注册
w:写入文件,先清空文件在写入文件内容
while True:
user=input("请输入用户名:")
if user.upper()=="Q":
break
pwd=input("请输入密码:")
data="{}-{}".format(user,pwd)
file_object=open("files/info.txt",mode="wt",encoding="utf-8")
file_object.write(data)
file_object.close()
#运行结果:只保存最后的一对
改写
file_object=open("files/info.txt",mode="rt",encoding='utf-8')
while True:
user=input("输入用户名:")
if user.upper()=="Q":
break
pwd=input("请输入密码:")
data="{}-{}".format(user,pwd)
file_object.write(data)
file_object.close()
文件操作在各类软件中占有重要地位
python内置了文件对象,通过open()函数就可以指定模式打开文件并创建文件对象
文件读写方法都会自动改变文件指针位置