Python | 文件操作(读、写)

Python | 文件操作(读、写)

在计算机中,所有的信息,包括图片、文件、程序等,都被表示为二进制数据。

二进制是一种数字系统,只有两个数字0和1,用于表示信息的两种状态。

计算机之所以使用二进制的原因是因为它可以很容易地被物理设备实现,二进制数的简单性和可操作性也使得计算机能够快速地处理信息。

1.1 读文件

  • 读文本文件
  • 读图片等非文本文件
# 1.打开文件
# 第一个参数可以是相对路径,也可以是绝对路径
# mode 读取文件的类型,rb表示二进制
file_object = open('info.txt', mode='rb')
# 2. 读取文件的内容,并赋值给data
data = file_object.read()
# 3. 关闭文件
file_object.close()

print(data)
# 打印出来的是文件内原文的二进制类型
# b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc...'

# 将文本的内容由 二进制字节类型,转换为 utf-8 字符串类型
text = data.decode("utf-8")
print(text)
# 你好,我是无言非影。

非文本文件的类型,一般就直接读取转换后的二进制类型内容。

file_object = open('1.png', mode='rb')
# 2. 读取文件的内容,并赋值给data
data = file_object.read()
# 3. 关闭文件
file_object.close()

print(data)
# b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00:\x00\x...'

每次读取文本文件的时候,都需要手动使用 decode 内置方法使用起来会很不方便。

  • 只读文本模式
# 参数 mode 表示文件的打开模式,'rt' 表示只读文本模式(Read Text)。
# 参数 encoding 表示文件的编码方式,'utf-8' 表示使用 UTF-8 编码。
file_object = open('info.txt', mode='rt', encoding='utf-8')

# 读取整个文件的内容
data = file_object.read()
# 关闭文件
file_object.close()

print(data)
# 你好,我是无言非影。

注意:

  • 路径

    • 绝对路径(需要确定程序在哪里执行的)
    • 相对路径
  • 读文件的时候,文件不存在,程序会报错

    • 可以使用 python 内置函数判断路径是否存在

      # 判断路径是否存在
      import os
      exists = os.path.exists('info.txt')
      print(exists) # True
      no_exists = os.path.exists('info123.txt')
      print(no_exists) # False
      

1.2 写文件

  • 写文本文件

    • mode='wb' 表示指定文件内容是以二进制写入,需要将写入的内容通过 .encode('utf-8') 转换为文本可是

    • file_object = open('writeTest.txt', mode='wb')
      file_object.write('wuyanfeiying'.encode('utf-8'))
      file_object.close()
      
      # 可以简化为
      # mode='wt' 表示使用 'wt' 表示文本写入模式。
      
      
    • 可以简化为:

    • mode=‘wt’ 表示使用 ‘wt’ 表示文本写入模式

    • file_object = open('writeTest.txt', mode='wt')
      file_object.write('wuyanfeiying2')
      file_object.close()
      
  • 写图片等非文本文件

    • 例子:复制图片

    • # 打开二进制文件 'sgs_1.jpg' 以二进制读取模式
      f1 = open('sgs_1.jpg', mode='rb')
      # 读取打开的二进制文件的全部内容,并存储在变量 'content' 中
      content = f1.read()
      # 关闭已打开的文件。
      f1.close()
      
      # 以二进制写入模式打开文件 'sgs_2.jpg'
      f2 = open('sgs_2.jpg', mode='wb')
      # 将之前从 'sgs_1.jpg' 读取的内容写入 'sgs_2.jpg' 文件
      f2.write(content)
      # 闭已打开的写入文件 'sgs_2.jpg'
      f2.close()
      
练习1
  • 用户注册

让用户输入用户名和密码,之后写入files文件夹下的info.txt文件中

user = input("请输入用户名:")
pwd = input("请输入密码:")

data = "{}-{}".format(user,pwd)

file_object = open('files/info.txt', mode='wt', encoding='utf-8')
file_object.write(data)
file_object.close()
练习2
  • 多用户注册
while True:
    user = input("请输入用户名(输入q/Q退出):")
    if user.upper() == 'Q':
        break
     pwd = input("请输入密码:")

    data = "{}-{}".format(user, pwd)

    file_object = open('files/info.txt', mode='wt', encoding='utf-8')
    file_object.write(data)
    file_object.close()

出现问题:文件只更新最新的一条数据

原因:使用 w模式 写入文件的时候,会先清空文件,再在文件中写入内容。

在这里插入图片描述

在这里插入图片描述解决方案:只打开文件一次,写入一次即可。

修改后:

file_object = open('files/info.txt', mode='wt', encoding='utf-8')
while True:
    user = input("请输入用户名(输入q/Q退出):")

    if user.upper() == 'Q':
        break
    pwd = input("请输入密码:")

    data = "{}-{}\n".format(user, pwd) # 加入换行符
    file_object.write(data)

file_object.close()

在这里插入图片描述

练习3

利用python取获取某个网址的发送请求并获取结果,需要利用到第三方的模块。

  • 下载第三方模块
pip install requests

在这里插入图片描述

  • 使用第三方模块
import requests

res = requests.get(url="https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=20",
                   headers={
                       "User-Agent": "Mozilla/5.0..."
                        }
                   )
print(res.content)

res.content 获取的是 网络传输的原始的二进制信息
在这里插入图片描述

以二进制格式存储获取到的数据保存在 log1.txt中。

file_object = open('files/logo1.txt', mode='wb')
file_object.write(res.content)
file_object.close()
练习4

从网上下载一张图片,文本信息写入文件。

import requests

res = requests.get(url="https://gd-hbimg.huaban.com/702dc8151dd594c701672d3141bb588aa38bbd7462ff-cHlM9F_fw1200",
                   headers={
                       "User-Agent": "Mozilla/5.0...."
                        }
                   )
print(res.content)

file_object = open('files/fw1200.jpg', mode='wb')
file_object.write(res.content)
file_object.close()

"User-Agent" 需要填写自己浏览器访问的信息。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值