文件

基础操作-文件写入、文件打开的模式详解

针对磁盘中的文件的读写。文件 I/O I-input O-output

文件操作步骤 1.打开文件 2.读写文件 3.关闭文件

  • 写入文件的操作
    • 1.打开文件 open()
    • 2.写入内容 write()
    • 3.关闭文件 close()
  • 读取文件的操作
    • 1.打开文件 open()
    • 2.读取内容 read()
    • 3.关闭文件 close()

open()打开文件

格式:open(文件的路径,打开的方式,[字符集])

参数

  • 文件路径:
    • 路径 url 统一资源定位符
    • 相对路径:相当于给别人指路的时候,在那条街对面
      • 针对文件的相对路径表示,从当前目录开始计算
        • 1.txt ===> 没有具体指明的话与./1.txt 是一个位置
        • ./1.txt ===> ./代表当前目录中的 1.txt
        • ../1.txt ===> ../代表当前目录中的上一级目录下的 1.txt
    • 绝对路径:类似于地址,具体到某个省市区街道小区门牌号
      • windows: c:/users/appdata/1.txt
      • linux: /user/home/1.txt
  • 打开方式:
    • 基础模式: w r x a
      • w w 模式 write 写入
        • 文件如果不存在,则创建这个文件
        • 文件如果存在,则打开这个文件,并清空里面的东西
        • 文件打开后,文件的指针在文件的最前面
      • r r 模式 read 读取
        • 文件如果不存在,则报错
        • 文件如果存在,则打开文件
        • 文件指针在文件的最前面
      • x x 模式 xor 异或模式
        • 文件如果不存在,则创建这个文件
        • 文件如果存在,则报错(防止覆盖)
        • 文件指针在文件的最前面
      • a a 模式 append 追加模式
        • 文件如果不存在,则创建文件
        • 文件如果存在,则打开文件
        • 文件指针在文件的最后
    • 扩展模式: b
      • b b 模式 bytes 二进制
      • + +模式 plus 增强模式(可读可写)
    • 文件操作模式的组合
      • w,r,a,x
      • wb,rb,ab,xb
      • w+,r+,a+,x+
      • wb+,rb+,ab+,xb+
  • 可选参数:字符集 encoding 设置文件的字符集
    • 如果是一个二进制的文件,不需要设置字符集
    • encoding=’utf-8’
1
2
3
4
5
fp = open('./1.txt','w',encoding='utf-8')
print(fp,type(fp)) # <_io.TextIOWrapper name='./1.txt' mode='w' encoding='utf-8'> <class '_io.TextIOWrapper'>

fp.write("Hello Python file")
fp.close()

结果会在当前目录下出现一个 1.txt 的文件,内容就是有一行 Hello Python file

打开模式的演示操作

1
2
3
4
# 写入文件操作
fp = open('./1.txt','a',encoding='utf-8')
fp.write('\n你好')
fp.close()

文件操作的高级写法

1
2
with open(文件路径,打开方式) as 变量:
变量.操作
1
2
3
4
with open('./1.txt','r+') as fp:
res = fp.read()
print(res)
fp.write(res)

设置指针的位置 seek(0) 设置在最开始的位置

文件操作的相关函数

write() 写入文件

格式:文件对象.write(内容)

  • write() 写入文件
    • 内容必须是字符串类型
  • writeline() 写入文件
    • 内容是一个容器,容器中的数据类型也必须是字符串
1
2
3
4
varlist = ['hello','this','is','content']

with open('./file/1.txt','w',encoding='utf-8') as fp:
fp.writelines(varlist)

read() 读取文件

  • read()
    • 格式:文件对象.read() 从当前指针位置读取到最后
    • 格式:文件对象.read(读取的字节数) 可以读取指定长度的字符
  • readline() 读取一行
    • 格式:文件对象.readline() 一次读取一行
    • 格式:文件对象.readline(读取的字节数) 可以读取一行指定的字符个数
  • readlines() 读取多行后,保存成一个列表返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
with open('./file/2.txt', 'r', encoding='utf-8') as fp:
res1 = fp.read()
fp.seek(3)
res2 = fp.read()

print(res1) # newmessage
print(res2) # message

with open('./file/3.txt', 'r', encoding='utf-8') as fp:
res = fp.readline()
print(res) # Pycharm是一款开发Python常用
res = fp.readline(3)
print(res) # 并且十

with open('./file/3.txt', 'r', encoding='utf-8') as fp:
res = fp.readlines()
print(res) # ['Pycharm是一款开发Python常用\n', '并且十分便捷的集成开发环境\n']

seek() 文件指针

  • 可以使用文件指针 seek 设置指针位置
    • seek(0):在开头位置
    • seek(0,2):在末尾位置
    • seek(num):在 num 位置

truncate() 截断文件内容

  • 按照所需要的数据,截断文件的内容

close() 关闭文件

格式:文件对象.close() 关闭打开的文件

访问文件夹

  • 获取当前路径 os.getcwd()
  • 改变当前路径 os.chdir()
  • 创建新文件夹 os.mkdir()
  • 修改文件夹名称 os.rename()
  • 删除文件夹 os.rmdir()
  • 遍历文件夹 os.walk()

练习题-注册和登录功能

  • 注册功能
    • 需要用户名和密码以及确认密码
    • 注册时如果用户名已经存在,则不能再次注册
  • 登录功能
    • 需要使用已经注册的用户信息登录
    • 密码输入错误 3 次后,锁定账户信息(不能再使用该账户进行操作)

注册功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
userlist = []
pwdlist = []

with open('./user.txt','a+',encoding='utf-8') as fp:
fp.seek(0)
res = fp.readlines()
for i in res:
r = i.strip() # 去掉了左右两侧的多余空格和换行
arr = r.split(':')
userlist.append(arr[0])
pwdlist.append(arr[1])

def register():
# 输入用户名
flag = True
while flag:
username = input('欢迎注册,请输入要注册的用户名:')
if username in userlist:
print('用户已存在,请登录或重新输入用户名')
else:
# 输入密码
while True:
pwd = input('请设置用户名密码:')
if len(pwd) >= 3:
repwd = input('请确认密码:')
if pwd == repwd:
print('注册成功')
flag = False
print(username, pwd, repwd)
# 打开文件写入数据
with open('./user.txt','a+',encoding='utf-8') as fp:
fp.write(f'{username}:{pwd}\n')
break
else:
print('两次密码不一致,请重新输入')
else:
print('密码长度过短,请重新输入')

register()

登录功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
blacklist = []

with open('./black.txt', 'a+', encoding='utf-8') as fp:
fp.seek(0)
result = fp.readlines()
for i in result:
r = i.strip() # 去掉了左右两侧的多余空格和换行
blacklist.append(r)

def login():
flag = True
while flag:
username = input('欢迎登录,请输入要登录的用户名:')
if username in blacklist:
print('您的账号已被锁定请联系管理员')
flag = False
elif username in userlist:
i = userlist.index(username)
count = 3
while count:
pwd = input('请输入密码:')
if pwd == pwdlist[i]:
print('登录成功!')
flag = False
break
else:
count -= 1
if count == 2:
print('密码输入错误,还有2次重新输入机会')
elif count == 1:
print('粗心大意咯,只剩1次输入密码的机会啦')
else:
print('登录失败啦,账号被你锁定啦')
with open('./black.txt','a+',encoding='utf-8') as fp:
fp.write(f'{username}\n')
flag = False
break
else:
print('用户名输入错误,请重新输入')

login()

登录与注册功能的合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
def register():
# 输入用户名
flag = True
while flag:
username = input('欢迎注册,请输入要注册的用户名:')
if username in userlist:
print('用户已存在,请登录或重新输入用户名')
else:
# 输入密码
while True:
pwd = input('请设置用户名密码:')
if len(pwd) >= 3:
repwd = input('请确认密码:')
if pwd == repwd:
print('注册成功')
flag = False
print(username, pwd, repwd)
# 打开文件写入数据
with open('./user.txt','a+',encoding='utf-8') as fp:
fp.write(f'{username}:{pwd}\n')
break
else:
print('两次密码不一致,请重新输入')
else:
print('密码长度过短,请重新输入')


def login():
flag = True
while flag:
username = input('欢迎登录,请输入要登录的用户名:')
if username in blacklist:
print('您的账号已被锁定请联系管理员')
flag = False
elif username in userlist:
i = userlist.index(username)
count = 3
while count:
pwd = input('请输入密码:')
if pwd == pwdlist[i]:
print('登录成功!')
flag = False
break
else:
count -= 1
if count == 2:
print('密码输入错误,还有2次重新输入机会')
elif count == 1:
print('粗心大意咯,只剩1次输入密码的机会啦')
else:
print('登录失败啦,账号被你锁定啦')
with open('./black.txt','a+',encoding='utf-8') as fp:
fp.write(f'{username}\n')
flag = False
break
else:
print('用户名输入错误,请重新输入')


if __name__ == '__main__':


while True:
userlist = []
pwdlist = []
blacklist = []

with open('./user.txt', 'a+', encoding='utf-8') as fp:
fp.seek(0)
res = fp.readlines()
for i in res:
r = i.strip() # 去掉了左右两侧的多余空格和换行
arr = r.split(':')
userlist.append(arr[0])
pwdlist.append(arr[1])

with open('./black.txt', 'a+', encoding='utf-8') as fp:
fp.seek(0)
result = fp.readlines()
for i in result:
r = i.strip() # 去掉了左右两侧的多余空格和换行
blacklist.append(r)
choice = input('欢迎来到我的网站,请输入你的要进行的功能\n1.注册\n2.登录\n3.退出\n')
if choice == '1':
register()
elif choice == '2':
login()
else:
break

更新: 2024-01-03 23:56:04
原文: https://www.yuque.com/zacharyblock/cx2om6/gbqyc0puv2x9dims