Python文件基础操作(六)

文件编码

编码是一种“翻译规则”,用于实现 文本内容 ↔ 二进制数据 的相互转换。
计算机只能识别 01,而我们的文字、符号、文件内容都必须经过编码才能被存储和读取。


什么是编码?

PDF 第 1 页中的两张图展示了文本如何变成二进制(文字化如下):

图示 1(页面 1 图示文字化):

我 喜 欢 你
 ↓  ↓  ↓  ↓
编码 → 1011 1101 1111 1001

不同编码方式会把同样的内容翻译成不同的二进制序列。


常见编码

图示强调了一些常见编码方式:

  • UTF-8(全球通用、最推荐)
  • GBK(中文编码)
  • Big5(繁体中文编码)

不同编码方式就像不同的“密码本”,同样的文字在不同编码中对应的二进制不同。


编码与解码必须一致

PDF 图示 2(页面 1 下方)说明:

使用编码A翻译成二进制 → 解码时必须使用编码A  
否 则 → 得到乱码

因此阅读文件时一定要知道文件采用的编码方式。


实际开发中建议

  • 除非有特殊需求,一律使用 UTF-8 编码格式。

文件操作概念引入

PDF 第 1 页底部说明了文件操作的核心流程:

  • 打开文件
  • 关闭文件
  • 读取内容
  • 写入内容

并强调:
Python 文件与 txt 文件在同一目录时可直接写文件名读取,否则必须写绝对路径(更推荐)。

示例来自 PDF(文字化):

f = open("2011年1月销售数据.txt", "r", encoding="UTF-8")
print(f.read())

文件的打开

Python 使用 open() 函数来打开文件,无论是读取已有文件,还是创建新文件,都需要通过它来“建立连接”。


open() 的基本语法

open(name, mode, encoding)

参数说明:

  • name:文件路径(可写相对路径,也可写绝对路径)
  • mode:文件打开模式,例如只读、写入、追加等
  • encoding:编码格式(推荐 UTF-8)

PDF 示例(页面 2):

f = open("C:/code/bill.txt", "r", encoding="UTF-8")

注意事项:

  • encoding 参数不是第三位,不能用位置参数,只能用关键字参数指定。
  • open() 返回一个 文件对象,可通过该对象的属性和方法对文件进行操作。

文件路径的书写

PDF 图示说明:

  • 如果 txt 文件与 Python 文件在 同一目录 → 直接写文件名即可
  • 不在同一目录 → 必须写相对路径或绝对路径(推荐使用绝对路径)

图示 1(页面 1 图像内容文字化):

pyspark入门/
 ├─ orders.txt
 ├─ search_log.txt
 ├─ test01.py
 └─ test02.py

Python 文件与 txt 文件不在同一目录,必须写完整路径读取

示例(来自图示):

f = open("C:/code/pythonDemo/pyspark入门/orders.txt", "r", encoding="UTF-8")
print(f.read())

文件打开模式(mode)

PDF 表格(页面 2)总结了三种最常用的模式:

模式描述
r只读方式打开文件,指针在文件开头(默认模式)
w写入模式。若文件存在,则覆盖原内容;若不存在,则创建新文件
a追加模式。若文件存在,将内容写入文件尾部;若不存在,则创建新文件

补充说明:

  • 新手建议:路径尽量写绝对路径,减少错误。

一次打开文件的代码结构

PDF 示例:

f = open("C:/code/bill.txt", "r", encoding="UTF-8")
print(f.read())

步骤:

  1. open() 打开文件 → 获得文件对象 f
  2. 通过 f.read() 读取内容
  3. 操作完成后需关闭文件(close 将在下一章详细讲)

文件的读取

文件读取常见场景包括:

  • 读取全部内容
  • 分行读取
  • 按字节数读取
  • 循环逐行读取

PDF 中总结了所有读取方式,并强调重要细节:
每次读取都会从上一次结束的位置继续;文件内容只能在一次 open() 中读一次。


read() —— 读取全部或指定长度内容

语法:

文件对象.read(num)
  • num 未指定 → 读取整个文件内容
  • num 指定 → 读取 num 字节的数据

示例(PDF page 3):

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.read()
print(content)
# 输出:
# 观止
# study

读取指定字节:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.read(2)
print(content)
# 输出:
# 观止

图片内容转文字

示意图说明了逐次读取的行为:

文件内容:hello world(共 11 字节)

第一次:read(6) → hello
第二次:read(6) → world
第三次:read(6) → (空,因为内容已读完)

说明:
read 是连续读取,每次读取后文件指针向后移动。


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

readlines() —— 读取所有行返回列表

语法:

文件对象.readlines()

示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
content = f.readlines()
print(content)
print(type(content))

输出:

['观止\n', 'study']
<class 'list'>

for 循环读取每一行

文件对象可以直接用于 for 循环,逐行读取:

for line in open("C:/code/test.txt", "r", encoding="UTF-8"):
    print(line)

输出(带空行是因为每一行结尾已有换行符):

观止

study

关闭文件:close()

如果不调用 close 且程序未退出:

  • 文件将一直被占用
  • 无法删除 / 覆盖 / 重命名该文件

示例:

f = open("C:/code/test.txt", "r", encoding="UTF-8")
# ...执行文件操作
f.close()

PDF page 4 图示说明:

错误提示:文件正在使用,因此无法完成操作
原因:文件未关闭,被 Python 程序占用

with open() —— 自动关闭文件

推荐方式,避免忘记 close。

语法:

with open(path, mode, encoding) as f:
    f.readlines()

示例(PDF page 5):

with open("C:/code/test.txt", "r", encoding="UTF-8") as f:
    f.readlines()

特点:

  • 离开 with 代码块后自动 close
  • 即使出现异常也能正常关闭文件

文件的写入

写入文件常见于保存日志、导出结果、生成数据文件等场景。

PDF 特别强调两个关键点:

  • w 模式会清空文件再写入
  • write 写入后内容不会立即落盘,需 flush 或 close 刷新

写入示例

f = open("C:/code/test.txt", "w")

# 文件不存在 → 自动创建
# 文件存在 → 内容会被清空(重要!)

f.write("hello world")
f.flush()  # 刷新,把内容真正写入硬盘

write() 不会立即写入硬盘(缓冲区机制)

明确指出:

  • write 写入的数据会 先存入内存缓冲区
  • flush() 或 close() 才会真正写入文件
  • 这样做是为了减少频繁写磁盘,提高性能

图示:

编辑 test.txt → 已写入 "hello world"
如果没有 flush 或 close,则文件可能暂时仍为空
刷新后才会看到内容真正写入文件

close() 会自动 flush

close() 做了两件事:

  1. 刷新缓冲区,将内容写入文件
  2. 释放文件资源(否则文件被占用)

因此以下写入方式也是正确的:

f = open("C:/code/test.txt", "w")
f.write("hello world")
f.close()  # 自动刷新并关闭

推荐写法:with open 写入

with 会自动 close,自然包含 flush:

with open("C:/code/test.txt", "w", encoding="UTF-8") as f:
    f.write("hello world")

这是生产环境中最常用的文件写入方式。


文件的追加写入(append 模式)

写入文件时,如果你希望 不覆盖原内容,而是向文件尾部追加新内容,则需要使用 "a" 模式。


追加模式 a 的特点

  • 文件不存在 → 自动创建新文件
  • 文件存在 → 新写入内容会追加到末尾,而不会清空原内容
  • write() 后仍然需要 flush() 或 close() 才会真正写入硬盘

"w" 模式相比:

模式文件不存在文件存在时行为
w创建文件清空原内容 再写入
a创建文件保留原内容 在尾部追加

使用示例(来自 PDF page 6)

f = open("C:/code/test.txt", "a")

# 写入内容
f.write("study")

# 刷新缓冲区,真正写入硬盘
f.flush()

若 test.txt 原内容为:

hello world

执行上方代码后:

hello worldstudy

若想换行追加,可写:

f.write("\nstudy")

追加模式的使用场景

  • 日志系统持续追加日志
  • 数据记录不断写入文件
  • 不希望每次覆盖原数据的情况

Python 文件操作总结

本章总结了 Python 处理文件时常用的所有知识点,包括编码、文件打开、读取、写入、追加写入、文件关闭方式等。

以下为 PDF 思维导图内容的完整文字版。


文件编码

编码是一种“翻译规则”,用于实现:

文本内容(例如:我喜欢你)
  ↓ 使用编码(UTF-8 / GBK / Big5)
二进制数据(0101 1100 1011 ...)

关键要点:

  • 计算机只能识别 0 和 1 → 编码用于转化文本
  • 编码与解码必须一致,否则会出现乱码
  • 推荐统一使用 UTF-8(全球通用编码)

文件的打开

文件在操作前必须打开,通过 open() 完成:

open(name, mode, encoding="UTF-8")

常用模式:

模式含义
r只读(默认)
w写入(会清空原文件)
a追加(在末尾追加内容)

路径建议使用“绝对路径”避免错误。


文件的读取

读取会从文件指针当前位置开始,因此每次读取后指针都会向后移动。

常用方法:

方法功能
read(num)读取指定字节数;不写 num 则读取全部内容
readline()读取一行
readlines()按行读取全部内容 → 返回列表
for line in 文件对象逐行读取(最常用方式之一)

文件读完后必须 close,否则文件会被占用不能修改。


自动关闭文件的方式

使用 with open() 可以自动 close:

with open("test.txt", "r", encoding="UTF-8") as f:
    data = f.readlines()

特点:

  • 自动释放文件资源
  • 即使代码出错也能正常关闭文件

是最推荐的文件读取形式。


文件的写入

写入时内容不会立即写入磁盘,而是存入 缓冲区

write() → 写入内存(缓冲区)
flush() / close() → 真正写入文件

写入方式:

f = open("test.txt", "w")
f.write("hello world")
f.flush()

使用 "w" 模式会直接清空原内容。


文件的追加写入

如果希望保留原文件内容,在末尾追加新内容,应使用 "a" 模式:

f = open("test.txt", "a")
f.write("study")
f.flush()

追加模式特点:

  • 不会清空原内容
  • 文件不存在会自动创建
  • 常用于日志持续写入场景

核心流程总结

完整文件操作流程:

1. 打开文件(open)
2. 读取 / 写入 / 追加等操作
3. 刷新缓冲区(flush)可选
4. 关闭文件(close)或使用 with 自动关闭

一句话总结文件操作

  • 读文件用:read / readline / readlines / for
  • 写文件用:w + write + flush
  • 追加写入用:a + write + flush
  • 推荐用法:with open(…) as f:自动关闭文件
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇