文章目录
1 文件介绍
什么是文件
- 用来存储某些内容的容器
文件步骤:
- 打开文件
- 读写
- 关闭
文件的作用
- 好记性不如烂笔头
- 把一些必要的东西或数据存放起来,等需要用到的时候可以直接拿出来使用
2 文件的打开与关闭
1、打开文件
方式一
open(文件名,访问模式)=open(filename,mode,encoding=’ ‘)
mode: r w a r+ w+ a+ rb wb ab rb+ wb+ ab+
最常用:
r 只读的模式,指针放在文件的开头,默认模式
w 写的模式,如果文件已经存在,那么覆盖,如果不存在,则创建。
a 追加 ,如果文件存在,那么在文件结尾追加内容
如果文件不存在,则创建
方式二
with open(filename,mode,encoding=’ ‘) as f :的方法不需要关闭文件
with open(filename,mode,encoding=’’)as f:
f=open('a.txt','w')
f.close()
with open('password.txt','r',encoding='utf-8')as f:
content=f.read()
print(content)
2 关闭
在Python中,使用close()函数可以关闭一个文件
示例:
f = open(‘test.txt’,’w’)
f.close()
3 文件的读写
3.1 写数据
写数据:
用write()函数,如果在文件中需要写中文,那么需要用参数encoding=‘utf-8’
这个方法会在上一次结束的位置进行下一次写数据
write(filename,mode,encoding=’’)
f=open('b.txt','w',encoding='utf-8')
f.write('hello world\n')
f.write('hello python')
f.write('你好,我正在学习python')
f.writelines('hello world')
f.writelines('hello python')
f.close()
结果:(写到文件b.txt里面,注意w和a的用法,w覆盖,a追加)
3.2 读数据
读数据:
read(num):
1 当使用read()进行读取数据的时候,那么返回整个内容,
f=open('b.txt','r',encoding='utf-8')
content=f.read()
print(content)
f.close()
结果:
2 如果read(num),那么读取num个字节,下一次读取的时候是从上一次读取的末尾开始读
f=open('b.txt','r',encoding='utf-8')
content=f.read(5)
print(content)
#接着上次查询
content1=f.read(5)
print(content1)
f.close()
结果:
readlines():
- 一行一行的读取,读取全部内容,放入到一个列表里,通过for循环获取每一个元素
f=open('b.txt','r',encoding='utf-8')
content=f.readlines()
print(type(content))
for line in content:
print(line)
print(content)
f.close()
readline():读取一行
f=open('b.txt','r',encoding='utf-8')
content=f.readline()
print(content)
f.close()
结果:
3.3 制作文件的备份
任务描述:
1、文件的复制
2、输入文件的名字,然后程序自动完成对文件进行备份
1 文件复制
-
1 先把文件b.txt的通过readlines读取出来
-
2 打开一个新的文件,把读出来的内容一行一行写入新文件
-
3 关闭两个文件
f1=open('b.txt','r',encoding='utf-8')
f2=open('c.txt','w',encoding='utf-8')
content=f1.readlines()
for line in content:
f2.write(line)
f2.close()
f1.close()
结果:(将b.txt文件复制为c.txt)
2 文件备份
- 输入文件名,程序自动进行备份
old_filename=input('请输入需要备份的文件名:')
f=open(old_filename,'r',encoding='utf-8')
a=old_filename.find('.')
new_filename=old_filename[0:a]+'_bat'+old_filename[a:]
f2=open(new_filename,'w',encoding='utf-8')
for line in f.readlines():
f2.write(line)
f2.close()
f.close()
结果:(手动输入备份文件名字,备份完的文件名字为b_bat.txt)
3.4 文件的定位读写
tell():
- 查看当前文件指针的位置
f=open('b.txt','r',encoding='utf-8')
content=f.read(5)
print('读取的内容:%s'%content)
position=f.tell()
print('当前位置:%d'%position)
f.close()
结果:
seek(offset,from): 定位
定位到某个位置:seek()、seek(offset,from)
offset:偏移量
from:方向
0 表示文件开头
1 表示当前位置
2 表示文件末尾
f=open('b_bat.txt','r',encoding='utf-8')
f.seek(5,0)
content=f.read(5)
print(content)
f.close()
结果:
4 文件的重命名与删除
#需要导入os模块
import os
#重命名:rename(old_filename,new_filename)
os.rename('a.txt','a1.txt')
#删除文件:remove(filename)
os.remove('b.txt')
#创建文件夹:mkdir(directory)
os.mkdir('test')
#获取当前目录:getcwd()
cwd=os.getcwd()
print(cwd)
#获取某个路径下的所有文件或文件夹:listdir()
path=os.listdir()
print(path)
#删除某个文件夹:rmdir()
os.rmdir('test')
5 二进制文件
文件针对二进制文件操作的时候,需要注意
打开二进制文件的时候,open(filename,mode),open()方法只有两个参数。
读写:
在读,如果不进行转码,那么读出来的就是二进制
data.decode(‘utf-8’)
写,字符串的时候,需要用到encoding
write(bytes(’’,encoding=‘utf-8’))
write(’’.encode(‘utf-8’))
encode:转码
decode:解码
5.1 写一个二进制文件
f=open('a.txt','wb')
f.write(bytes('杨威',encoding='utf-8'))
f.write('杨浩'.encode('utf-8'))
f.close()
5.2 读取二进制文件
f=open('a.txt','rb')
content=f.read()
print(content.decode('utf-8'))
f.close()
结果:
6 练习
读取一个文件,显示除了以井号(#)开头的行以外的所有行。
#1、打开文件
f = open("b.txt",encoding='utf-8')
#2、把文章全部读取,以列表形式存储。
res = f.readlines()
#3、循环整个列表,去除以空格开头的行的空格,然后去除以#号开头的行的#号
for i in res:
i.strip(" ")
if i[0] == "#":
continue
else:
print(i)
结果:
6.1 制作一个密码薄
制作一个"密码薄",其可以存储一个网址(例如 com.hailiangedu),
和一个密码(例如 123456),
请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能
#
import os
def print_menu():
"""打印功能模块"""
print('*'*50)
print('功能1:增加一个网址')
print('功能2:删除一个网址')
print('功能3:修改一个网址')
print('功能4:查看一个网址')
print('功能5:查看所有网址')
print('功能6:退出系统')
print('*'*50)
def create_file():
"""创建文件"""
filename='password.txt'
dirs=os.listdir()
if filename in dirs:
pass
else:
f=open('password.txt','w',encoding='utf-8')
f.write('网址\t密码\n')
f.close()
def add():
"""增加网址及相应的密码"""
url=input('请输入要保存的网址:')
password=input('请输入相应的密码:')
content=url+"\t"+password+"\n"
f=open('password.txt','a',encoding='utf-8')
f.write(content)
f.close()
def dele():
del_url=input('请输入需要删除的网址:')
f=open('password.txt','r',encoding='utf-8')
content=f.readlines()
flag=0
for line in content:
a=line.index('\t')
if line[:a]==del_url:
content.remove(line)
f1=open('password.txt','w',encoding='utf-8')
f1.writelines(content)
flag=1
print('删除成功')
f1.close()
f.close()
if flag==0:
print('此网址不存在')
def alt_one():
alt_url=input('请输入需要修改的网址:')
f=open('password.txt','r',encoding='utf-8')
content=f.readlines()
flag=0
for line in content:
a=line.index('\t')
if line[:a]==alt_url:
b=content.index(line)
new_url=input('请输入新的网址:')
new_password=input('请输入新网址的密码:')
content[b]=new_url+'\t'+new_password+'\n'
f1=open('password.txt','w',encoding='utf-8')
f1.writelines(content)
f1.close()
f.close()
flag=1
print('修改成功')
if flag==0:
print('此网址不存在')
def find_one():
"""查找某个网址"""
find_url=input('请输入查找的网址:')
f=open('password.txt','r',encoding='utf-8')
content=f.readlines()
flag=0
for line in content:
a=line.index('\t')
if line[:a]==find_url:
print(line,end=' ')
flag=1
print('此网址存在')
if flag==0:
print('此网址不存在')
def look():
f=open('password.txt','r',encoding='utf-8')
content=f.readlines()
for line in content:
print(line,end=' ')
f.close()
#main函数控制整个程序流程
def main():
"""程序控制"""
#调用打印功能模块的函数 ----定义打印功能模块的函数
print_menu()
create_file()
while True:
#从键盘输入一个序号,这个序号的功能是去实现某个模块的功能
num=int(input('请输入功能序号:'))
if num==1:
add()
elif num==2:
dele()
elif num==3:
alt_one()
elif num==4:
find_one()
elif num==5:
look()
elif num==6:
break
else:
print('请输入正确的序号')
main()
结果:(在main函数中,通过键盘输入的这个序号,去具体调用相应模块的函数)