Bootstrap

Python文件读写

文件读写

常见文件的读写分类:

  • 普通文本文件:txtpymdhtml
  • csv文件:.csv,需要借助于系统模块csv
  • 二进制文件:图片,音频,视频,压缩包等
  • 对象的序列化和反序列化:picklejson
  • 办公文件:excelword,需要借助于第三方模块

一、普通文件读写

1.1 读取
1.1.1 读取文件的操作流程
  • 打开文件:f = open(file,mode,encoding)

    • 传递需要读取的文件的路径:相对路径/绝对路径
    • 选择打开文件的模式
    • 传递需要书写读取文件的编码格式,注意使用关键字参数
    • f = open()f表示被打开的文件对象,后续操作都需要通过f完成
  • 读取内容:read()/readline()/readlines()

    • read():一次全部读取完毕,适用于数据量少的文件
    • readline():一次只能读取一行
    • readlines():一次性全部读完,同样适用于数据量少的情况的,但是返回列表,每一行内容是列表中的元素,使用较多
  • 关闭文件:close()

    • 关闭文件,为了节约内存空间
1.1.2 打开文件语法
open(file,mode,encoding)
  • 说明:

    • file:需要打开的文件名称或文件的路径

      • 文件名称:需要打开的文件和当前py文件在同一个目录下,不常用
      • 文件路径:需要打开的文件和当前py文件不在同一个目录下,可以使用相对路径或绝对路径
      • 相对路径:相对当前工程的路径,如:aaa/file1.txt,推荐
      • 绝对路径:从系统盘符开始的路径,如:c:/users/xxxx/Desktop/Coding5/Day21Code/aaa/file1.txt
    • mode:打开文件的模式

      模式 说明
      'r' open for reading (default) 普通文件的读取
      'w' open for writing, truncating the file first 普通文件的写入(删除原文件,生成一个空的新的文件)
      'a' open for writing, appending to the end of the file if it exists 普通文件的写入(追加,在原文件内容后添加)
      'rb' 打开二进制文件用于读取
      'wb' 打开二进制文件用于写入
    • encoding

      • 常用的编码格式:utf-8gbk
1.1.3 正反斜杠

在Python中,文件路径可以使用正斜杠(/)或反斜杠(\)来表示。这两种方式在大多数情况下都是等效的,但是在某些特定情况下可能会有一些差异。

在Windows操作系统中,反斜杠(\)被用作路径分隔符。因此,如果你在Windows上编写Python代码,通常会使用反斜杠来表示文件路径,例如:

path = 'C:\\Users\\Username\\Documents\\file.txt'

然而,Python也支持使用正斜杠(/)来表示文件路径,即使在Windows上也是如此。这是因为Python解释器会自动将正斜杠转换为适当的路径分隔符。因此,你也可以这样写:

path = 'C:/Users/Username/Documents/file.txt'

在其他操作系统(如Linux和macOS)中,正斜杠(/)被用作路径分隔符。因此,在这些系统上,使用正斜杠表示文件路径是常见的做法。

总而言之,Python中使用正斜杠或反斜杠来表示文件路径都是可以的。选择哪种方式主要取决于你所使用的操作系统和个人偏好。如果你的代码需要在不同操作系统上运行,可以考虑使用os.path模块提供的函数来处理文件路径,这样可以确保代码在不同平台上都能正常工作。

1.1.4 代码演示

以访问txt文件为例

image-20231026112420521

  • 打开文件:open()

    • 采用绝对路径访问
      • 注:因为路径表达含有反斜杠\,所以使用r使转义失效
    f = open(r"d:/word.txt", "r", encoding="utf-8")
    
    • 情况一:如果py文件和txt文件平级,直接写txt文件的名称
      • 在文件01_读取普通文件.py中访问文件致橡树.txt
    f1 = open(r"致橡树.txt", "r", encoding="utf-8")
    
    • 情况二:如果py文件和txt文件的上级目录平级,则需要从上级目录开始书写
      • 在文件01_读取普通文件.py中访问文件夹aaa中的文件致橡树2.txt
    f2 = open(r"aaa/致橡树2.txt", "r", encoding="utf-8")
    
    • 情况三:虽然py文件和txt文件都在一个子目录中,只要二者是平级的关系,则可以直接书写文件名
      • 在文件夹data中的text01.py中访问文件致橡树1.txt
    f3 = open("致橡树1.txt", "r", encoding="utf-8")
    
    • 情况四:如果py文件的上级目录和txt文件平级,则需要回退路径,..表示回退一级
      • 在文件夹data中的text01.py中访问文件致橡树.txt
    f4 = open("../致橡树.txt", "r", encoding="utf-8")
    
    • 情况五:如果py文件的上级目录和txt文件的上级目录平级
      • 在文件夹data中的text01.py中访问文件夹aaa中的文件致橡树2.txt
    f5 = open("../aaa/致橡树2.txt", "r", encoding="utf-8")
    
# 2.读取内容:read()/readline()/readlines()
# 一次全部读取完毕,适用于数据量少的文件
# r1 = f1.read()
# print(r1)
# 一次只能读取一行
# r2 = f1.readline()
# print(r2)
# 一次性全部读完,同样适用于数据量少的情况的,但是返回列表,每一行内容是列表中的元素,使用较多
r3 = f1.readlines()
print(r3)

# 3.关闭文件:close()
# 关闭文件,为了节约内存空间
f1.close()

# 扩展:结合异常读取文件
# FileNotFoundError
# ValueError
# LookupError

f = None
try:
f = open(r'致橡树.txt', 'r', encoding='gbk56')
print(f.read())
except FileNotFoundError as e:
print("文件路径错误:",e)
;