Python - 文件部分

- 第 101 篇 -
Date: 2025 - 05 - 26
Author: 郑龙浩/仟墨

Python - 文件部分

学习时间: 2025-05-19

文章目录

  • Python - 文件部分
  • 一 文件与路径
    • 1 文本文件
    • 2 二进制文件
    • 3 编码格式
      • ① 常见编码格式
      • ② 指定编码格式
      • ③ 最佳格式
      • ④ 处理编码错误
    • 4 绝对路径
    • 5 相对路径
      • 基本写法
      • 返回上级目录
      • 组合路径
  • 二 操作文件的函数和方法
  • 三 操作文件基本套路
  • 四 文件指针
    • 1 文件指针的基本介绍
    • 2 注意:第二次调用 read 方法的时候读取不到内容
    • 3 `seek(offset, whence)`和 `tell()`
  • 五 打开文件的方式
    • 1 基本语法
    • 2 访问方式
  • 六 读取文件内容
    • (1)一次性读取文件内容
    • (2)`readline`按行读取文件内容
      • 1 前言
      • 2 `readline` 方法
    • (3)使用`for lline int file`遍历文件内容
    • (4)`read(n)` 与 `readline(n)` 可以写参数,`n`表示读取多少个字符
      • `file.read(5)`只打印前5个字符
  • 七 文件复制
    • 1 小文件复制
      • (1 )步骤
      • (2 )具体实现
    • 2 大文件复制
      • (1)步骤
      • (2)具体实现
  • 八 文件/目录的常用管理操作
    • 1 基本介绍
    • 2 文件操作
    • 3 目录操作
  • 九 自动关闭文件的方法
    • 1 打开一个文件
    • 2 同时打开多个文件
  • 十 文件刷新

一 文件与路径

1 文本文件

  • 可以使用 文本编辑软件 查看的文件
  • 本质上还是二进制文件
  • C 的源文件,Python 的源文件 也是文本文件
  • \r 表示回车
  • \n 表示换行

2 二进制文件

  • 保存的内容不可直接给人阅读,而是使用提供的 其他专门的 软件 内容才能让人看懂

    比如要看图片,要用专门的软件打开 图片阅读文件,音频和视频同理

  • Eg: 图片文件、音频文件、视频文件…

  • 二进制文件不能直接使用 文本文件软件 进行查看,比如不能使用 记事本 直接打开图片或者视频,否则会乱码

3 编码格式

① 常见编码格式

  • ASCII: 最早的编码,只能表示英文字符和一些特殊符号
  • UTF-8: 最常用的Unicode编码,可以表示几乎所有语言的字符
  • GBK: 中文编码,主要用于简体中文
  • ISO-8859-1: 西欧语言编码

② 指定编码格式

在Python中打开文件时,可以通过encoding参数指定编码格式:

# 以UTF-8编码打开文件
file = open("example.txt", "r", encoding="utf-8")# 以GBK编码打开文件
file = open("example.txt", "r", encoding="gbk")

③ 最佳格式

  • 推荐使用UTF-8编码,它是跨平台、跨语言的最佳选择

  • 在Python文件开头添加编码声明:

    # -*- coding: utf-8 -*-
    

④ 处理编码错误

# 忽略无法解码的字符
with open('file.txt', 'r', encoding='utf-8', errors='ignore') as f:content = f.read()# 替换无法解码的字符
with open('file.txt', 'r', encoding='utf-8', errors='replace') as f:content = f.read()

4 绝对路径

路径分为绝对路径、相对路径

  • 绝对路径:从文件系统的根目录开始的完整路径

    C:\Users\Name\Documents\file.txt
    在Python读取的时候斜杠要反着来
    C:/Users/Name/Documents/file.txt
    

5 相对路径

基本写法

  • file.txt - 当前目录下的文件
  • data/file.txt - 当前目录的data子目录中的文件
  • ./config.ini - 显式表示当前目录下的文件(等同于config.ini

返回上级目录

  • ../ - 返回上一级目录
    • ../settings.ini - 上级目录中的文件
    • ../../file.txt - 上两级目录中的文件

组合路径

  • ../logs/app.log - 上级目录的logs子目录中的文件
  • ./../shared/data.txt - 先当前目录,再上级,然后进入shared目录

二 操作文件的函数和方法

Python 中操作文件需要记住1个函数和3个方法

函数方法说明
函数open打开文件,并且返回文件操作对象
方法read将文件内容读取到内存
方法write将指定内容写入文件
方法close关闭文件
方法find查找内容,返回索引

三 操作文件基本套路

  1. 打开文件

    open函数的第一个参数是要打开的文件名(文件名区分大小写)

    • 如果文件存在,返回文件操作对象
    • 如果文件不存在,会抛出异常
  2. 读、写文件

    • 读:将文件内容读入内存

      read方法可以一次性读入返回文件的所有内容

    • 写:将内存内存写入文件

      write

  3. 关闭文件

    close方法负责关闭文件

    • 如果忘记关闭文件,会造成系统资源耗尽,而且会影响到后续对文件的访问
    • 方法执行后,会把文件指针移动到文件的末尾

三个步骤

# 1 打开文件
file = open("文件路径", '打开方式', encoding='文件编码')
# 2 读取
text = file.read()
# 3 关闭
file.close() # 千万不要忘记关闭文件

四 文件指针

1 文件指针的基本介绍

  • 文件指针标记从哪个位置开始读取数据

  • 第一次打开文件的时候,通常文件指针会之指向文件的开始位置

  • 当执行了 read 方法后,文件指针会移动到读取内容的末尾

    默认情况下会移动到 文件末尾

2 注意:第二次调用 read 方法的时候读取不到内容

  • 如果执行了一次 read 方法,读取了所有的内容,那么再次调用 read 方法的时候,不可以获取到内容!!!!
  • 因为 第一次读取之后,文件指针移动到了文件的末尾,再次调用的时候是从文件的末尾开始读取的,所以不会读取到任何的内容

3 seek(offset, whence)tell()

  • seek(offset, whence):移动文件指针
    • whence=0:从文件开头计算(默认)
    • whence=1:从当前位置计算
    • whence=2:从文件末尾计算
  • tell():返回当前文件指针位置
with open('file.txt', 'r') as f:print(f.tell())  # 输出:0f.seek(5)  # 移动到第5个字节print(f.tell())  # 输出:5

五 打开文件的方式

1 基本语法

open 函数默认以 只读方式 打开文件,并且返回文件对象

file = open("文件路径", "访问方式", "文件编码")

2 访问方式

  • 如果只需要读的话,第二个参数可以不用写
访问方式说明
r只读 的方式打开文件。如果文件存在,文件指针将会放在文件的开头,这是默认模式。如果文件不存在,会抛出异常
w只写 的方式打开文件。如果文件存在,如果写入,文件内容会被覆盖。如果文件不存在,创建新的文件
a追加 的方式打开文件。如果文件存在,文件指针将会放在文件的结尾。如果文件不存在,创建新的文件进行写入
r+读写 的方式打开文件。如果文件存在,文件指针将会放在文件的开头。如果文件不存在,会抛出异常
w+读写 的方式打开文件。如果文件存在,如果写入,文件内容会被覆盖。如果文件不存在,创建新的文件进行写入
a+读写 的方式打开文件。如果文件存在,文件指针将会放在文件的结尾。如果文件不存在,创建新的文件进行写入

频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以 只读、只写 的方式来操作文件

六 读取文件内容

(1)一次性读取文件内容

# 打开文件,并让file存储文件指针
file = open('源文件') # 或 open('文件', 'r')  效果是等效的test = file.read() 
print(test)
# 关闭文件(必须执行)
file.close()# 打印结果
1234567
abcde
aaaaa
bbbbbbbbb

(2)readline按行读取文件内容

1 前言

  • read 方法默认会把文件的 所有内容一次性读取到内存
  • 如果文件太大,对内存的占用会非常严重

2 readline 方法

  • readline方法可以一次读取一行的内容
  • readline方法执行后,会把 文件指针 移动到 下一行,准备下次读取
  • readline方法可以利用循环也可以把一个很大的文件一次性读取出来

“源文件”文件

1234567
abcde
aaaaa
bbbbbbbbb

test1.py文件

# 打开文件,并让file存储文件指针
file = open('源文件') # 或 open('文件', 'r')  效果是等效的
while True:# 每次循环,读取一行test = file.readline() # 如果读取到末尾的时候,返回空字符串''# 判断是否读取到内容  如果文件指针指向结尾,则braekif not test: # 如果 not '' 则为 Truebreakprint(test, end = '')
# 关闭文件(必须执行)
file.close()# 打印结果
1234567
abcde
aaaaa
bbbbbbbbb

(3)使用for lline int file遍历文件内容

# 打开文件,并让file存储文件指针
file = open('源文件') # 或 open('文件', 'r')  效果是等效的
for line in file:print(line, end = '') # 如果写的是 print(line) 会每一行下面多打印行空格,因为print会自动打印一行空格
# 关闭文件(必须执行)
file.close()# 打印结果
1234567
abcde
aaaaa
bbbbbbbbb

(4)read(n)readline(n) 可以写参数,n表示读取多少个字符

file.read(5)只打印前5个字符

# 打开文件,并让file存储文件指针
file = open('源文件') # 或 open('文件', 'r')  效果是等效的test = file.read(5)  # 只打印前5行
print(test)
# 关闭文件(必须执行)
file.close()# 打印结果
12345

七 文件复制

1 小文件复制

(1 )步骤

  1. 打开源文件和目标文件
    • 源文件以只读方式打开
    • 目标文件以只写方式打开
  2. 将原文件的中的内容读取出来
  3. 将读取出来的内容写入到目标文件
  4. 关闭两个文件

(2 )具体实现

源文件

1234567
abcde
aaaaa
bbbbbbbbb

目标文件

复制以后,该文件内容与源文件相同

test2.py

# 1 打开文件
file_read = open('源文件')
file_write = open('目标文件', 'w')
# 2 读写文件
text = file_read.read()
text2 = file_write.write(text)
# 3 关闭打开的
file_read.close()
file_write.close()

2 大文件复制

因为文件太大,如果一次性读取出来的话会占用大量的内存空间,所以分行复制,一行一行的复制

(1)步骤

  1. 打开源文件和目标文件
    • 源文件以只读方式打开
    • 目标文件以只写方式打开
  2. 按照一行一行的形式将源文件中的内容复制到目标文件当中去
  3. 关闭两个文件

(2)具体实现

# 1 打开文件
file_read = open('源文件')
file_write = open('目标文件', 'w')
# 2 读写文件
while True:# 读取一行内容text = file_read.readline()# 文件指针指向末尾,退出循环if not text:breaktext2 = file_write.write(text)
# 3 关闭打开的
file_read.close()
file_write.close()

八 文件/目录的常用管理操作

1 基本介绍

  • 在终端/文件浏览器中可以执行常规的 文件 / 目录 管理操作,例如:

    创建、重命名、删除、改变路径、查看目录内容…

  • Python中,如果用上面的功能的话,需要导入 os 模块

2 文件操作

方法名说明例子
rename重命名文件os.rename(源文件名,目标文件名)
remove删除文件os.remove(文件名)

3 目录操作

如下操作中,文件或者目录操作都支持 相对路径绝对路径

方法名说明例子
listdir目标列表os.listdir(目标名)
mikdir创建目录os.mikdir(目标名)
rmdir删除目录os.rmdir(目标名)
getcwd获取当前目录os.getcwd()
chdir修改工作目录os.chdir(目标目录)
path.isdir判断是否是文件os.path.isdir(文件路径)

九 自动关闭文件的方法

只要离开了缩进范围,就自动关闭了

1 打开一个文件

可以不手动写 close 方法关闭文件

with open('test.txt', 'r', encoding='utf-8') as file:content = file.read()print(content)
# 文件已自动关闭

2 同时打开多个文件

with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:data = infile.read()outfile.write(data.upper())
# 两个文件都已自动关闭

十 文件刷新

一般来说不需要手动刷新

下面三种情况需要

  • 实时日志记录:如果程序可能崩溃,希望日志立即写入硬盘,而不是一直在内存缓冲区

    with open("debug.log", "a") as f:f.write("Error: something went wrong!\n")f.flush()  # 确保日志立即写入,即使程序崩溃
    
  • 长时间运行的文件写入:如果文件长时间不关闭,但希望内容尽快写入硬盘。

    也就是如果大文件需要分批次写入,就需要每隔一段时间就刷新一次。

    file = open("data.txt", "w")
    for i in range(1000000):file.write(f"Line {i}\n")if i % 1000 == 0:file.flush()  # 每1000行刷一次,避免内存占用过高
    file.close()
    
  • 多进程/多线程共享文件:如果另一个进程需要立即读取刚写入的内容,但文件尚未关闭

下面的情况不需要手动刷新

  • 正常情况:用 with 语句或正确调用了 close(),数据一定会写入硬盘,无需手动 flush()
  • 小文件写入:如果写入的数据量小,缓冲区很快填满,系统会自动刷新。
  • 程序正常退出:Python 在程序结束时会自动刷新所有缓冲区

刷新步骤

# 1 打开文件
file = open("XX")
# 2 读取
text = file.read()
# 3 刷新
flie.flush()
# 4 关闭
file.close() # 千万不要忘记关闭文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言开始绘图--柱状图

R语言是一种专门用于统计计算和图形显示的编程语言,广泛应用于数据分析、统计建模、数据可视化等领域。它由Ross Ihaka和Robert Gentleman于1993年在新西兰奥克兰大学开发,现已成为数据科学和统计学领域的重要工具。 R语言的特点 R语言具有丰富的统计和…

PYTORCH_CUDA_ALLOC_CONF基本原理和具体示例

PYTORCH_CUDA_ALLOC_CONFmax_split_size_mb 是 PyTorch 提供的一项环境变量配置,用于控制 CUDA 显存分配的行为。通过指定此参数,可以有效管理 GPU 显存的碎片化,缓解因显存碎片化而导致的 “CUDA out of memory”(显存溢出&#…

Halcon仿射变换---个人笔记

文章目录 1.概述2.仿射变换类型3.仿射变换流程4.根据特征点、角度计算仿射变换矩阵4.1 从空变换矩阵创建仿射变换矩阵4.2 把旋转角度添加到仿射变换矩阵4.3 把缩放添加到仿射变换矩阵4.4 把平移添加到防射变换矩阵4.5 把斜切添加到仿射变换矩阵4.6 根据点和角度计算刚性仿射变换…

《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》

《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》 一、引言 在当今数字化的时代背景下,Linux操作系统凭借其卓越的性能、可靠性和开源的优势,在服务器、云计算、嵌入式系统等众多领域占据着举足轻重的地位。对于IT运维…

【Webtrees 用户手册】第 2 章 - 访客须知

Webtrees 用户手册/访客指南 信 第 2 章 - 访客须知 <- 章节概述 目录 1页面结构2标题菜单 2.1主题 2.1.1云2.1.2颜色2.1.3绝佳2.1.4最小2.1.5网络树2.1.6西妮娅 2.2语言2.3登记2.4搜索字段 3主菜单 3.1家谱3.2图表3.3列表3.4日历3.5报告3.6寻找3.7故事3.8常见问题 (FAQ) 4…

动态规划-918.环形子数组的最大和-力扣(LeetCode)

一、题目解析 听着有点复杂&#xff0c;这里一图流。 将环形问题转化为线性问题。 二、算法原理 1.状态表示 2.状态转移方程 详细可以移步另一篇博客&#xff0c;53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 3.初始化 由于计算中需要用到f[i-1]和g[i-1]的值&…

飞牛fnNAS远程映射盘符

目录 一、NAS、PC端配置Zerotier 二、使用网上邻居 三、使用WebDAV 1.开启WebDAV 2.PC上安装RaiDrive并设置 如果能将NAS作为本机一个盘符来使用,一定会令我非常方便。如果是本地,可以很方便实现。 将飞牛NAS映射为本地盘符,常用两种方式,一种是网上邻居,另一种是We…

华为2025年校招笔试手撕真题教程(二)

一、题目 大湾区某城市地铁线路非常密集&#xff0c;乘客很难一眼看出选择哪条线路乘坐比较合适&#xff0c;为了解决这个问题&#xff0c;地铁公司希望你开发一个程序帮助乘客挑选合适的乘坐线路&#xff0c;使得乘坐时间最短&#xff0c;地铁公司可以提供的数据是各相邻站点…

SAP ABAP VK11/VK12 创建销售物料价格(附源码)

需求: 通过接口批量创建销售物料的价格(含阶梯价),对应事务码VK11/VK12 方法:(会在下面源码写出各个方法的优缺点,仅供参考) 通过函数 RV_CONDITION_COPY创建(目前最优)通过函数 BAPI_PRICES_CONDITIONS通过BDC录屏使用VK11事务码进行创建分析: 通过测试可发现,VK…

噪声建模在一小时:最小化准备工作的自监督低光RAW图像去噪

论文标题: Noise Modeling in One Hour: Minimizing Preparation Efforts for Self-supervised Low-Light RAW Image Denoising发表日期: 2025年5月作者: Feiran Li, Haiyang Jiang*, Daisuke Iso发表单位: Sony Research, Tokyo University原文链接: https://arxiv.org/pdf/25…

Puppeteer 浏览器自动化操作工具

pyppeteer 是 Python 版本的 Puppeteer&#xff0c;而 Puppeteer 是由 Google 开发的一个 Node.js 库&#xff0c;用于控制 Chrome 或 Chromium 浏览器。pyppeteer 允许你通过 Python 代码自动化操作浏览器&#xff0c;实现网页爬取、自动化测试、生成截图或 PDF 等功能。 核心…

接口性能测试-工具JMeter的学习

接口登录链接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、启动Jmeter 2、在“测试计划”下添加线程组 3、在“线程组”下添加“HTTP”取样器 4、填写“HTTP请求”的相关请求数据 5、在“线程组”下添加“查看结果树”监听器 6、点击“启动”按钮…

mybatis-plus与jsqlparser共用时报sql解析错误

手动引入jsqlparser-4.6版本&#xff0c;但mybatis-plus中引用为4.4版本 解决方法一&#xff1a; jsqlparser版本与mybatis-plus中引用版本一致。 解决方法而二&#xff1a; 排除掉mybatis-plus中的jsqlparser。

用MMdetection框架训练自己的数据集(全流程实战)

前面我们准备好了COCO格式的数据集&#xff1a;将YOLO格式的数据集转换为mmdetection格式-CSDN博客https://blog.csdn.net/qq_54708219/article/details/148224187?spm1001.2014.3001.5501 下面我们使用MMdetection开始训练。 1.创建新的数据集类 首先&#xff0c;在mmdet/d…

VS Code中Maven未能正确读取`settings.xml`中配置的新路径

在VS Code中Maven未能正确读取settings.xml中配置的新路径&#xff0c;通常是由于以下原因导致的&#xff1a; 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默认配置或指向其他settings.xml文件。解决方法&#xff1a; 手动指定settings.xml路径…

2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现&#xff1a; 图像的配准是图像处理领域中的一个典型问题和技术难点&#xff0c;其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变&#xff0c;医生可能使用…

RPM之(1)基础使用

RPM之(1)基础使用 Author: Once Day Date: 2025年5月26日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实践记录_Once-Day的博客-CSDN博客 …

国内可做大批量pcb的工厂有哪些?

在电子产业升级浪潮中&#xff0c;PCB作为电子设备的基础载体&#xff0c;其批量生产能力直接决定着终端产品的市场响应速度与品质稳定性。本文精选五家具备核心竞争力的厂商&#xff0c;从工艺深度、产能规模到服务模式展开剖析&#xff0c;为采购决策提供专业参考。 猎板PCB…

【视频】使用海康SDK保存的MP4无法在浏览器(html5)中播放

1、问题描述 在使用海康 SDK 的 NET_DVR_SaveRealData 接口&#xff0c;将视频流保存成MP4文件后&#xff0c;通过浏览器无法播放MP4&#xff0c;播放其它的MP4正常。 2、原因分析 对比可以正常播放的MP4 和 无法播放的MP4文件&#xff0c;比较它们的详细信息&#xff0c;发…

AI时代新词-生成对抗网络(GAN)

一、什么是生成对抗网络&#xff08;GAN&#xff09;&#xff1f; 生成对抗网络&#xff08;Generative Adversarial Network&#xff0c;简称GAN&#xff09;是一种由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;组成的深度学习模…