Python文件基础操作(六)

举报
观止study 发表于 2023/05/31 16:21:54 2023/05/31
【摘要】 一.文件编码编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。思考:计算机只能识别0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?答案:使用编码技术(密码本)将内容翻译成0和1存入。计算机中有许多可用编码:UTF-8,GBK,Big5等不同的编码,将内容翻译成二进制也是不同的对内容的编码与解码必须使用同一套编码,否则会导致错误的结果UTF-8是目前全球通用的...

一.文件编码

编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。

  • 思考:计算机只能识别0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?

  • 答案:使用编码技术(密码本)将内容翻译成0和1存入。

image.png

  • 计算机中有许多可用编码:UTF-8,GBK,Big5等不同的编码,将内容翻译成二进制也是不同的

  • 对内容的编码与解码必须使用同一套编码,否则会导致错误的结果

image.png

  • UTF-8是目前全球通用的编码格式,除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。

二.文件操作

在日常生活中,文件操作主要包括打开、关闭、读、写等操作

  • 操作过程中请务必注意文件路径的书写
    • 只有操作文件与python文件在同一目录才能直接写文件名。
      image.png

    • 新手建议都写文件的绝对路径,不易导致错误发生。
      image.png

(1) 文件的打开

(1.1) 基本格式

  • 在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
  • 基本语法:
open(name, mode, encoding)
# name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
# mode:设置打开文件的模式(访问模式):只读、写入、追加等。
# encoding:编码格式(推荐使用UTF-8)
  • 示例代码:
f = open("C:/code/bill.txt", "r", encoding="UTF-8")
# encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
# f是open函数的文件对象,可以使用对象.属性或对象.方法对其进行访问

(1.2) 打开模式

  • 文件常用的三种基础访问模式,可通过mode指定。

  • r->read(读取),w->write(写入),a->append(追加)

模式 描述
r 只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。 如果该文件不存在,创建新文件进行写入。

(2) 文件的读取

操作 功能
文件对象.read(num) 读取指定长度字节 不指定num读取文件全部
文件对象.readline() 读取一行
文件对象.readlines() 读取全部行,返回列表
for line in 文件对象 for循环文件行,一次循环得到一行数据
文件对象.close() 关闭文件对象
with open() as f 通过with open语法打开文件,可以自动关闭
  • 每次读取会从上一次读取结束的位置开始
  • 每次open()中的内容只能被读取一次

image.png

(2.1) read方法

  • num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

  • 语法:文件对象.read(num)

  • 使用示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.read() # 不传入num,读取文件中所有的数据。
print(content)
# 打印
# 观止
# study

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.read(2) # 传入num,读取2字节长度数据。
print(content)
# 打印
# 观止

(2.2) readline()方法

  • 一次读取一行内容

  • 语法:文件对象.readline()

  • 使用示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.readline()
print(f"第一行内容:{content}")  # 打印 第一行内容:观止
content = f.readline()
print(f"第二行内容:{content}")  # 打印 第二行内容:study

(2.3) readlines方法

  • 按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

  • 语法:文件对象.readlines()

  • 使用示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.readlines()
print(content)  # 打印 ['观止\n', 'study']
print(type(content))  # 打印 <class 'list'>

(2.4) for循环读取

  • for循环读取每一行数据
  • 使用示例:
# 每一个line临时变量,就记录了文件的一行数据
for line in open("C:/code/test.txt", "r", encoding="UTF-8"):
    print(line)
# 打印
# 观止
#
# study

(2.5) close关闭文件对象

  • 如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用,无法操作

  • 使用示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
# 需要执行代码
f.close()
  • 代码中不关闭文件对象,且python程序未停止运行,无法对文件删除重命名等操作:
    image.png

(2.6) 自动close

  • 通过在with open的语句块中对文件进行操作,可以在操作完成后自动关闭close文件
  • 即使出现异常也会自动调用关闭文件操作
  • 语法:with open() as f
  • 使用示例:
with open("C:/code/test.txt", "r", encoding="UTF-8") as f:
  f.readlines()

(3) 文件的写入

  • 使用示例:
f = open("C:/code/test.txt", "w")
# 文件如果不存在,使用”w”模式,会创建新文件
# 文件如果存在,使用”w”模式,会将原有内容清空
# 2.文件写入
f.write('hello world')
# 3. 内容刷新
f.flush()

image.png

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容会真正写入文件
    • close()方法,附带flush()方法的功能
  • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

(4) 文件的追加

  • 使用w模式,每次写入会将原有内容清空,写入新内容

  • 使用a模式,文件不存在会创建文件,文件存在会在最后追加内容写入文件

  • 使用示例:

f = open("C:/code/test.txt", "a")
# 2.文件写入
f.write('study')
# 3. 内容刷新
f.flush()

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。