欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

day08

程序员文章站 2022-07-09 21:29:01
1、文件操作 1.1、对文件的读 1.2、对文件的写 1.3、追加 1.4、读写操作 1.5、写读操作 1.6、追加之后再读取 1.7、一些功能讲解 1.7.1、截取源文件的字符 1.7.2、对seek功能的讲解 1.7.3、tell()、readable()、readline()、readline ......

1、文件操作

  1.1、对文件的读

 1 # 事先在e盘下创建一个文本文档并读取
 2 f = open('e:\新建文本文档.txt',mode='r',encoding='ansi')
 3 content = f.read()
 4 print(content)
 5 f.close()
 6 
 7 # 事先在项目下创建一个文本文档,再去读它
 8 f = open('demo',mode='r',encoding='utf-8')
 9 content = f.read()
10 print(content)
11 f.close()
12 
13 # 以二进制打开,这种读取方式主要用于非文字文件
14 f = open('demo',mode='rb')
15 content = f.read()
16 print(content)
17 f.close()

  1.2、对文件的写

 1 # 没有此文件就会创建文件,已有此文件就会将源文件中的内容删除,再写。
 2 # 注意写的时候光标在内容的前面
 3 f = open('demo1',mode='w',encoding='utf-8')
 4 f.write('只写,再添加')
 5 f.close()
 6 
 7 # wb
 8 f = open('demo2',mode='wb')
 9 f.write('只写,再添加'.encode('utf-8'))
10 f.close()

  1.3、追加

1 # 追加:a
2 f = open('demo2',mode='a',encoding='utf-8')
3 f.write(',追加')
4 f.close()
5 
6 # 二进制追加:ab
7 f = open('demo2',mode='ab')
8 f.write(',二进制追加'.encode('utf-8'))
9 f.close()

  1.4、读写操作

 1 # 先读,再写:r+
 2 f = open('demo2',mode='r+',encoding='utf-8')
 3 print(f.read())
 4 f.write(',先读,再写')
 5 f.close()
 6 
 7 # 在读写模式下,进行写读
 8 # 若demo下的内容为python,我先写入aaa,再进行读,会发现读出来的内容是hon,而demo下的内容是aaahon
 9 # 请记住,在读写模式下进行写读,写入的内容会从前往后,替换原有的内容,读出的内容是没有被替换的内容
10 f = open('demo',mode='r+',encoding='utf-8')
11 f.write('aaa')
12 print(f.read())
13 f.close()
14 
15 # 以二进制进行读写
16 f = open('demo2',mode='r+b')
17 print(f.read())
18 f.write(',以二进制类型读写'.encode('utf-8'))
19 f.close()

  1.5、写读操作

# 正常的先写再读,虽然能写入内容,但是却读不出来,但是只要在写之后加一个f.seek(0),将光标移到最前面,就可以读出来了
f = open('demo2',mode='w+',encoding='utf-8')
f.write('写读')
f.seek(0)
print(f.read())
f.close()

# 以二进制进行写读
f = open('demo2',mode='w+b')
f.write('以二进制写读'.encode('utf-8'))
f.seek(0)
print(f.read())
f.close()

  1.6、追加之后再读取

# a是追加,追加之后对他进行读会报错
f = open('demo2',mode='a',encoding='utf-8')
f.write('追加')
print(f.read())
f.close()

# 使用a+之后,对他进行追加,再将光标移动到0,再读就可以了
f = open('demo2',mode='a+',encoding='utf-8')
f.write('追加')
f.seek(0)
print(f.read())
f.close()

  1.7、一些功能讲解

    1.7.1、截取源文件的字符

 1 f = open('demo2',mode='r+',encoding='utf-8')
 2 content = f.read(3) # 读出来的都是字符,读取前三个
 3 print(content)
 4 f.close()
 5 
 6 f = open('demo2',mode='r+',encoding='utf-8')
 7 f.seek(2) # 定位到第三个,读剩下的。
 8 content = f.read()
 9 print(content)
10 f.close()

    1.7.2、对seek功能的讲解

# 若demo2中的内容是中文,如:你好啊
f = open('demo2',mode='r+',encoding='utf-8')
f.seek(3) # result:好啊
f.seek(2) # 会报错
content = f.read()
print(content)
f.close()
# 解释:seek定位是按照字节来定位的,一个中文三个字节,若seek(3)则正好定位到第二个字,若小于三,就定位不到第一个,就会报错

    1.7.3、tell()、readable()、readline()、readlines()、truncate()

f = open('demo',mode='r+',encoding='utf-8')
content = f.read()
print(content)
print(f.tell())# 得到当前光标的位置
print(f.readable())# 判断是否可读
print(f.readline())# 一行一行的读
print(f.readlines())# 每一行当成列表中的一个元素,添加到list中
f.truncate(2)# 从源文件中截取字符串,源文件会被改变
f.close()

    1.7.4、对文件进行for循环

1 对文件进行for循环
2 f = open('demo',mode='r+',encoding='utf-8')
3 for ln in f:
4     print(ln)

    1.7.5、with open()

1 # 写close可能有时候会忘记写,使用with open就不需要close
2 with open('demo',mode='r+',encoding='utf-8') as f:
3     print(f.read())
4 
5 # 同时打开多个进行操作
6 with open('demo',mode='r+',encoding='utf-8') as f,\
7         open('demo',mode='r',encoding='utf-8') as f1:
8     print(f.read())
9     print(f1.read())

    1.7.6、登录注册功能的应用

 1 username = input('请输入用户名')
 2 password = input('请输入密码')
 3 with open('demo',mode='w',encoding='utf-8') as f:
 4     f.write('{}\n{}'.format(username,password))
 5 print('恭喜您注册成功!')
 6 lis = []
 7 i = 0
 8 while i < 3:
 9     usn = input('请输入用户名')
10     pwd = input('请输入密码')
11     with open('demo',mode='r+',encoding='utf-8') as f1:
12         for ln in f1:
13             lis.append(ln)
14     if lis[0].strip() == usn and lis[1].strip() == pwd:
15         print('恭喜您,登录成功')
16         break
17     else:print('账号密码错误')
18     i += 1