python基础8 文件操作

138 阅读5分钟

文件的操纵简介

1.文件的本质
open(文件路径,读写模式,字符编码)

2.打开文件的两种方式
	方式1:
        f = open(...)
        f.close()
   方式2:
    	with open(...) as f:
           f.read()
ps:文件路径字符串的前面应该加一个字母r取消转移

文件读写模式

知识补充

1.with语法

  • 使用with语法可以一次性打开多个文件
with open(r'文件名1', 'r', encoding='utf8') as f1, open(r'文件名1', 'r', encoding='utf8') as f2, open(...) as f3, open(...) as f4...:

2.语法补全

     pass 推荐使用(易发现)
     ...  不推荐使用(在代码中不易发现)
  • 当我们还没想好写入什么代码时,使用python语法补全后,程序运行到补全位置不会报错,也不执行任何操作。

3.able

read+able   表示读的能力
write+able  表示写的能力
  • 在一般情况下,英语单词末尾加上able,表示了该单词描述的能力。

只读模式(r)

  • 1.只读模式一般是默认的。
  • 2.使用只读模式只能对文件内容进行读取查看。不能写,不能写。
  • 3.文件路径不存在,只读模式会直接报错。
  • 4.文件路径存在,只读模式会打开文件等待读取内容。 当文件路径不正确。结果如下:
with open(r'错误的路径', 'r', encoding='utf8') as f:
    pass

输出结果: 1656494484301.png 当文件路径正确,结果如下:

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())

输出结果: image.png

只写模式(w)

  • 1.使用只写模式只能对文件内容进行写的操作,不能读取,不能读取。
  • 2.当文件地址存在时,对文件进行编写会将文件内容进行清除后,再写入。
  • 3.当文件地址不存在时,只写模式会创建文件。 1.当文件路径正确,结果如下: a文件存在,在a文件内输入: image.png 执行代码:
with open(r'a.txt', 'w', encoding='utf8') as f:

    f.write('123')

输出结果: image.png

image.png 2.当文件路径错误,结果如下: 文件地址没有文件:

image.png

执行代码:

with open(r'b.txt', 'w', encoding='utf8') as f:

    f.write('123')

输出结果:新创建了一个文件,写入了123

image.png

image.png

image.png

只追加模式(a)

  • 1.使用只追加模式打开的文件会默认在末尾追加新的内容,不能读取。
  • 2.当文件地址存在时,追加模式不会清空文件内容,只会在文件末尾填写新的内容。
  • 3.当文件地址不存在时,追加模式会创建该文件。 当文件路径正确,结果如下: 文件b内:

image.png 执行代码:

with open(r'b.txt', 'a', encoding='utf8') as f:
    f.write('12315消费者投诉热线\n')

输出结果:

image.png

当文件路径错误,结果如下: c文件不存在: image.png 执行代码:

with open(r'c.txt', 'w', encoding='utf8') as f:
     pass

输出结果:

image.png image.png

文件的操作模式

文本模式(t)

rt       wt       at
  • 1.只能对文本文件进行操作。
  • 2.必须指定 encoding参数。
  • 3.读与写都以字符串为单位。
  • 4.进行文件操作时的默认模式。

二进制模式(b)

rb       wb       ab
  • 1.进行文件操作时必须要自己指定,不能省略。
  • 2.能够操作所有类型的文件。
  • 3.不用指定encoding参数。
  • 4。读和是以bytes为单位

文件的操作方法介绍

  • 1.read() 一次性读完文件内容。不会回到头重新读。(文件数据较大建议使用for循环读取。
for line in f:
    print(line)
  • 2.readline() 一次只读一行。
  • 3.readlines() 按行读取,将所有的内容并组织成列表返回
  • 4.readable() 判断当前文件是否可读
  • 5.writable() 判断当前文件是否可写
  • 6.write() 填写文件内容
  • 7.writelines() 支持填写容器类型(字典,元组,列表,集合)多个数据值
  • 8.flush() 将内存中的文件数据立刻刷到硬盘,相当于ctrl+s。

练习

1.编写简易版本的拷贝工具
	自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
	任何类型数据皆可拷贝
	ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可

cd = input('请输入要拷贝文件的路径>>>').strip()
new_cd = input('请输入拷贝后的路径>>>').strip()
print(cd)
print(new_cd)
with open(cd, 'rb') as read_f,\
        open(new_cd, 'wb',) as write_f:
    data = read_f.read()
    write_f.write(data)
2.利用文件充当数据库编写用户登录、注册功能
	文件名称:userinfo.txt
	基础要求:
		用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
 	拔高要求:
       用户可以连续注册
   		用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
   	提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
user = []
while True:
    print('输入1进行注册,输入2进行登录.')
    function = input('请输入功能编号:').strip()
    if function == '1':
        username = input('请输入用户名:').strip()
        if username not in user:
            password = input('请输入密码').strip()
            user_dict = {}
            user_dict['name'] = username
            user_dict['key'] = password
            user.append(username)
        else:
            print('注册失败,用户名已存在')
    elif function == '2':
        username = input('请输入用户名:')
        if username in user:
            password = input('请输入密码:')


    else:
        print('无效的指令')