文件

1.打开文件

open()

windows路径分隔符问题:

open(‘C:\a\nb\c\d.txt’)

这里由于\是转义符且\n为换行符,无法直接找到需要的文件

解放方案1:

​ open(r’C:\a\nb\c\d.txt’)

​ 2:

​ open(‘C:/a/nb/c/d.txt’)

open参数:

​ mode:

​ mode代表其操作文件的权限以及方式,权限有三种,方式有两种

      权限:
          r只读模式(带r的文件必须先存在)
        w只写模式
        a只追加写模式
        +:r+、w+、a+
        
      读写模式:
          t和b
            强调:t和b不能单独使用,必须跟r/w/a连用
            t文本(默认的模式)
                1、读写都以str(unicode)为单位的
                2、文本文件
                3、必须指定encoding='utf-8'
            b二进制/bytes

在这里插入图片描述

例:

​ f=open(r’aaa/a.txt’,mode=’rt’)

2.操作文件

1
res=f.read()

3.关闭文件

1
f.close()

4.with open

​ 在使用open时文件必须进行close操作,但with open无需主动进行关闭,系统会自动进行close

例:

1
2
3
4
5
with open('a.txt',mode='rt') as f1:

f=f1.read()

print(f)

5.指定字符编码

encoding=’字符编码’

1
2
3
with open('c.txt',mode='rt',encoding='utf-8') as f:
res=f.read() # t模式会将f.read()读出的结果解码成unicode
print(res,type(res))

6.实例

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
90
91
#1、编写文件copy工具
'''
a = input('请输入您复制的文件名:')
b = input('您将要复制的文件名:')
with open(a,mode='rb') as file,\
open(b,mode='wb+') as file2:
c=file.read()
d=file2.write(c)
print(f'您复制的文件{a},现在{b}文件的内容为{d}')
'''
#2、编写登录程序,账号密码来自于文件
#用户登陆
import re
'''用户登陆
a = input("请输入您的账号:")
b = input("请输入密码:")

with open('static/c.txt',mode='r+') as c:
while True:
d = c.readline()
e = a + ":" + b + '\n'
if e == d:
print("账号密码正确,登陆成功")
exit(0)
print(len(d))
if len(d) == 0:
print('登陆失败')
exit(1)
'''
'''注册账号
a = input("请输入您要注册的账号:")
b = input("请输入要注册的密码:")
with open('static/c.txt',mode='r+') as c:
while True:
d = c.readline()
f= d.split(':')
if a == f[0]:
print("账号已存在,请重新输入")
exit(1)
if len(d) == 0:
e = a + ":" + b + "\n"
c.seek(0,2)
c.write(e)
print('账号已注册成功')
exit(0)
'''
#面向对象
class zcdl():
def start(self):
self.start1 = input('''请输入要选择的功能:
1.登陆账号
2.注册账号
:''')
if self.start1 == '1':
self.denglu()
if self.start1 == '2':
self.zhuce()
def denglu(self):
a = input("请输入您的账号:")
b = input("请输入密码:")

with open('c.txt', mode='r+') as c:
while True:
d = c.readline()
e = a + ":" + b + '\n'
if e == d:
print("账号密码正确,登陆成功")
exit(0)
if len(d) == 0:
print('登陆失败')
exit(1)
def zhuce(self):
a = input("请输入您要注册的账号:")
b = input("请输入要注册的密码:")
with open('c.txt', mode='a+') as c:
c.seek(0, 0)
while True:
d = c.readline()
f = d.split(':')
if a == f[0]:
print("账号已存在,请重新输入")
exit(1)
if len(d) == 0:
e = a + ":" + b + "\n"
c.seek(0, 2)
c.write(e)
print('账号已注册成功')
exit(0)

duixiang = zcdl()
duixiang.start()

注意点:

1.在打开文件时需要注意rwa这三种模式每一种模式所在的指针位置以及是否会清空文件,还需要需要根据具体需求来移动指针位置。通过seek函数

2.seek(number,number) 第一个参数表示移动的位置为几个符号,正数右移动,负数左移动。第二个参数表示其在文件哪个位置。

0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!