9 .文件操作相关

第二模块 函数&模块

从现在开始,我们将进入系列课程第二模块的的学习。

第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题。

在这里插入图片描述

从今天开始,我们将进入第二模块的学习,此模块主要包含两大部分:

  • 函数,一个用于专门实现某个功能的代码块(可重用)。

    • 内置函数

      len、bin、oct、hex 等
      
    • 自定义函数

      def send_email():
          # 写了10行代码,实现了发送邮件。
          pass
      
      send_email()
      
      # 定义了一个函数,功能代码块
      def send_email():
          # 写了10行代码,实现了发送邮件。
          pass
      
      goods = [
          {
             "name": "电脑", "price": 1999},
          {
             "name": "鼠标", "price": 10},
          {
             "name": "游艇", "price": 20},
          {
             "name": "美女", "price": 998}
      ]
      for index in range(len(goods)):
          item = goods[index]
          print(index + 1, item['name'], item['price'])
      
      # 调用并执行函数
      send_email()
      
      while True:
          num = input("请输入要选择的商品序号(Q/q):")  # "1"
          if num.upper() == "Q":
              break
          if not num.isdecimal():
              print("用输入的格式错误")
              break
          num = int(num)
          send_email()
          if num > 4 or num < 0:
              print("范围选择错误")
              break
          target_index = num - 1
          choice_item = goods[target_index]
          print(choice_item["name"], choice_item['price'])
          send_email()
      
  • 模块,集成了很多功能的函数集合。

    • 内置模块,Python内部帮助我们提供好的。

      import random
      
      num = random.randint(0,19)
      
      import decimal
      
      v1 = decimal.Decimal("0.1")
      v2 = decimal.Decimal("0.2")
      v3 = v1 + v2
      print(v3) # 0.3
      
    • 第三方模块,网上下载别人写好的模块(功能集合)。

    • 自定义模块

9 .文件操作相关

在这里插入图片描述

目标:掌握基于Python对文件相关操作。

概要:

  • 文件操作
  • 文件夹和路径
  • csv格式文件
  • ini格式文件
  • xml格式文件
  • excel文件
  • 压缩文件

注意:每种格式包含很多相关操作,大家在学习的过程中只要掌握知识点的用法,参考笔记可以实现相关的练习即可,不必背会(在企业开发过程中也是边搜边实现。

1. 文件操作

在学习文件操作之前,先来回顾一下编码的相关以及先关数据类型的知识。

  • 字符串类型(str),在程序中用于表示文字信息,本质上是unicode编码中的二进制。

    name = "盖伦"
    
  • 字节类型(bytes)

    • 可表示文字信息,本质上是utf-8/gbk等编码的二进制(对unicode进行压缩,方便文件存储和网络传输。)

      name = "盖伦"
      data = name.encode('utf-8')
      print(data)  # b'\xe7\x9b\x96\xe4\xbc\xa6'
      
      result = data.decode('utf-8')
      print(result)  # "盖伦"
      
    • 可表示原始二进制(图片、文件等信息)

1.1 读文件

  • 读文本文件

    # 1.打开文件
    #	- 路径:
    #		相对路径:'info.txt'
    #		绝对路径:'D:\PycharmProjects\python_study\info.txt'(注意 windows 下路径建议用 双 \\ 或者 / )
    # 	- 模式
    # 		rb,表示读取文件原始的二进制(r, 读 read;b, 二进制 binary;)
    # 1.打开文件
    file_object = open('info.txt', mode='rb')
    # 2.读取文件内容,并赋值给data
    data = file_object.read()
    # 3.关闭文件
    file_object.close()
    
    print(data)  # b'hello,world'
    text = data.decode("utf-8")
    print(text)	# hello,world
    
  • 读图片等非文本内容文件。

    file_object = open('photo.png', mode='rb')
    data = file_object.read()
    file_object.close()
    
    print(data) # \x91\xf6\xf2\x83\x8aQFfv\x8b7\xcc\xed\xc3}\x7fT\x9d{.3.\xf1{\xe8\...
    

注意事项:

  • 路径

    • 相对路径,你的程序到底在哪里运行的?

      在这里插入图片描述

    • 绝对路径

      # 1.打开文件
      file_object = open('D:/PycharmProjects/python_study/info.txt', mode='rt', encoding='utf-8')
      # 2.读取文件内容,并赋值给data
      data = file_object.read()
      # 3.关闭文件
      file_object.close()
      

      windows系统中写绝对路径容易出问题:

      # file_object = open('C:\\new\\info.txt', mode='rt', encoding='utf-8')
      
      # \n 换行符, 所以必须使用 \\ 或者 /
      file_object = open(r'C:\new\info.txt', mode='rt', encoding='utf-8')
      data = file_object.read()
      file_object.close()
      print(data)
      
  • 读文件时,文件不存在程序会报错。

    Traceback (most recent call last):
      File "D:/PycharmProjects/python_study/study.py", line 8, in <module>
        file_object = open('new_info.txt', mode='rb')
    FileNotFoundError: [Errno 2] No such file or directory: 'new_info.txt'
    
    import os
    
    file_path = "D:/PycharmProjects/python_study/new_info.txt"
    # 判断路径是否存在
    exists = os.path.exists(file_path)
    if exists:
        # 1.打开文件
        file_object = open('new_info.txt', mode='rt', encoding='utf-8')
        # 2.读取文件内容,并赋值给data
        data = file_object.read()
        # 3.关闭文件
        file_object.close()
        print(data)
    else:
        print("文件不存在")
    

1.2 写文件

  • 写文本文件

    # 1.打开文件
    # 路径:t1.txt
    # 模式:wb(要求写入的内容需要是字节类型)
    file_object = open("t1.txt", mode='wb')
    
    # 2.写入内容
    file_object.write("盖伦".encode("utf-8"))
    
    # 3.文件关闭
    file_object.close()
    
  • 写图片等文件

    # 读取名为 a1 的图片
    f1 = open('a1.png',mode='rb')
    content = f1.read()
    f1.close()
    # 保存 a1 图片 为 a2
    f2 = open('a2.png',mode='wb')
    f2.write(content)
    f2.close()
    

基础案例:

# 案例1:用户注册
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:多用户注册
# w写入文件,先清空文件;再在文件中写入内容。
file_object = open("files/info.txt", mode='wt', encoding='utf-8')
while True:
    user = input("请输入用户名:")
    if user.upper() == "Q":
        break
    pwd = input("请输入密码:")
    data = "{}-{}\n".format(user, pwd)

    file_object.write(data)
file_object.close()

小高级案例:(超前)

利用Python想某个网址发送请求并获取结果(利用第三方的模块)

  • 下载第三方模块(在终端下运行)

    pip install requests
    

    在这里插入图片描述

  • 升级 pip 注意事项

    # 如果报这个错误的话 ModuleNotFoundError: No module named 'pip'
    # 执行一下两个命令进行改正修复
    python -m ensurepip
    python -m pip install --upgrade pip
    
  • 使用第三方模块

    import requests
    
    # url 网址
    res = requests.get(url="http://www.baidu.com")
    print(res)
    
# 案例1:去网上下载一点文本,文本信息写入文件。
import os
import requests

res = requests.get(
	url="https://book.douban.com/tag/%E9%9A%8F%E7%AC%94",
	headers={
   
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
	}
)

# 网络传输的原始二进制信息(bytes)

# 获取当前 python文件所在路径
current_path = os.getcwd()
# 拼接路径,并转换路径 \\  为  /
file_path = os.path.join(current_path, "files").replace("\\", "/")
# 判断文件是否存在,不存在则自动创建
if not os.path.exists(file_path):
	os.mkdir(file_path)
# 文件名
file_name = os.path.join(file_path, "data.txt")
file_object = open(file_name, mode='wb')
file_object.write(res.content)
file_object.close()

# 案例2:去网上下载一张图片,图片写入本地文件。

res = requests.get(
	url="https://pic.netbian.com/uploads/allimg/210812/234309-1628782989eba1.jpg",
	headers={
   
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
	}
)

# 网络传输的原始二进制信息(bytes)
# res.content

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

注意事项:

  • 路径
    • 绝对路径
    • 相对路径
  • 文件不存在时,w模式会新建然后再写入内容;文件存在时,w模式会清空文件再写入内容。

1.3 文件打开模式

上文我们基于文件操作基本实现了读、写的功能,其中涉及的文件操作模式:rt、rb、wt、wb,其实在文件操作中还有其他的很多模式。

========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r'       open for reading (default)
'w'       open for writing, truncating the file first
'x'       create a new file and open it for writing
'a'       open for writing, appending to the end of the file if it exists

'b'       binary mode
't'       text mode (default)

'+'       open a disk file for updating (reading and writing)

The default mode is 'rt' (open for reading text).

关于文件的打开模式常见应用有:

  • 只读:rrtrb (用)

    • 存在,读
    • 不存在,报错
  • 只写:wwtwb(用)

    • 存在,清空再写
    • 不存在,创建再写
  • 只写:xxtxb

    • 存在,报错
    • 不存在,创建再写。
  • 只写:aatab【尾部追加】(用)

    • 存在,尾部追加。
    • 不存在,创建再写。
  • 读写

    • r+、rt+、rb+,默认光标位置:起始位置

      file_object = open('info.txt', mode='rt+')
      
      # 读取内容
      data = file_object.read()
      print(data)
      
      # 写入内容
      file_object.write("你好呀")
      
      file_object.close()
      
      file_object = open('info.txt', mode='rt+')
      
      # 写入内容
      file_object.write("vn")
      
      # 读取内容
      data = file_object.read()
      print(data)  # -123
      
      file_object.close()
      
    • w+、wt+、wb+,默认光标位置:起始位置(清空文件)

      file_object = open('info.txt', mode='wt+')
      
      # 读取内容
      data = file_object.read()
      print(data)
      
      # 写入内容
      file_object.write("你好呀")
      
      # 将光标位置重置起始
      file_object.seek(0)
      
      # 读取内容
      data = file_object.read()
      print(data)
      
      file_object.close()
      
    • x+、xt+、xb+,默认光标位置:起始位置(新文件)

    • a+、at+、ab+,默认光标位置:末尾

      file_object = open('info.txt', mode='at+')
      
      # 写入内容
      file_object.write("盖伦")
      
      # 将光标位置重置起始
      file_object.seek(0)
      
      # 读取内容
      data = file_object.read()
      print(data)
      
      file_object.close()
      

多用户注册案例:

while True:
    user = input("用户名:")
    if user.upper() == "Q":
        break
    pwd = input("密码:")

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

    file_object = open('files/account.txt', mode='a')
    file_object.write(data)
    file_object.close()
file_object = open('files/account.txt', mode='a')

while True:
    user = input("用户名:")
    if user.upper() == "Q":
        break
    pwd = input("密码:")
    data = "{}-{}\n".format(user, pwd)
    file_object.write(data)

file_object.close()

1.4 常见功能

在上述对文件的操作中,我们只使用了write和read来对文件进行读写,其实在文件操作中还有很多其他的功能来辅助实现更好的读写文件的内容。

  • read,读

    • 读所有【常用】

      f = open('info.txt'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚学渣.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值