Python - 文件部分

news2025/5/27 21:57:40

- 第 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())  # 输出:0
    f.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() # 如果读取到末尾的时候,返回空字符串''
    # 判断是否读取到内容  如果文件指针指向结尾,则braek
    if not test: # 如果 not '' 则为 True
        break
    print(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:
        break
    text2 = 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.coloradmin.cn/o/2387048.html

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

相关文章

历年福州大学保研上机真题

2025福州大学保研上机真题 2024福州大学保研上机真题 2023福州大学保研上机真题 在线测评链接:https://pgcode.cn/problem?classification1 螺旋矩阵 题目描述 给定一个整数 n n n,要求打印出一个 n n n \times n nn 的螺旋矩阵。 例如&#xff…

大模型学习笔记day2 LoRA微调

LORA的核心思想基准模型不进行变化,我额外引入一部分参数来做专属内容处理,同时加上原有模型的推理能力,这部分新增加的的内容就是要训练出来的参数矩阵。 本征维度(Intrinsic Dimension):是指数据或空间中…

Maven-概述-介绍安装

目录 1.项目对象模型 2.依赖管理模型 3.仓库:用于存储资源,管理各种jar包 4.本地仓库路径 5.Maven配置本地仓库 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5.3 找到配置文件路径,使用VSCode方式打开 5.4 新…

GitHub Page填写域名显示被占用

问题描述 在Github上使用github page搭建个人博客,在项目中的Settings->Pages页面里面填写个人的域名时,出现如下报错信息,显示域名被占用情况 The custom domain example.com is already taken. If you are the owner of this domain, c…

java高级 -动态代理

动态代理的概念 动态代理是一种在运行时生成代理对象的机制,无需手动编写代理类。 代理就类似于中介公司,为明星置办各种前期准备。例如歌声需要开演唱会唱歌,那么此时就需要代理对象进行置办场地,设备,然后明星只需要…

机器学习算法:线性回归

1. 基础概念 线性回归是一种用于建模连续型目标变量(如价格、销量、温度)与一个或多个特征变量(如面积、广告投入、时间)之间线性关系的统计方法。 核心思想:找到一条直线(或超平面)&#xff0…

常见小问题(Open Folder as PyCharm Project)

1.删除pycharm鼠标右键快捷键打开项目 winr键打开,输入regedit,运行注册器 找到下面的路径:计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm 删除即可

第四十四节:目标检测与跟踪-模板匹配

一、引言 模板匹配的核心思想是通过在输入图像中搜索与预定义模板最相似的区域来定位目标。这种方法计算效率高、实现简单,特别适用于目标外观变化不大且背景相对简单的场景。本文将深入探讨模板匹配的原理、OpenCV中的实现方法、优化技巧以及实际应用案例。 二、模板匹配基础…

vue+ThreeJs 创建过渡圆圈效果

嗨,我是小路。今天主要和大家分享的主题是“vueThreeJs 创建过渡圆圈效果”。 今天在做着色器过渡效果练习,发现出现了很多新的函数,这些都超出了js之外,需要更多的掌握和学习。以下是自己的复盘和梳理。 1.获取距离 定…

MySQL:12_视图

视图 跟事务里讲的视图没有任何关系 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 一.基本使用 创建视图 create view 视图名 …

win11+vs2022 安装opencv 4.11.0图解教程

1. 下载opencv opencv官网下载地址:Releases - OpenCV 2. 双击运行该exe,即可进行安装,安装文件夹可自行选择 安装后目录如下: 3. 配置环境变量 使用win键搜索环境变量,选中系统变量中的Path,然后点击编辑…

n8n 读写本地文件

1.Docker Desktop 创建容器 docker run -d --name n8n -p 5566:5678 -v D:\docker\n8n_data:/home/node/.n8n -v D:\docker\n8n_files:/home/node/Files n8nio/n8n:latest 参数说明: 1.-d :表示以 detached 模式运行容器(后台运行) 2.--name n8n :指定容器名称为n8n。 3.-p 55…

LlamaFirewall:开源框架助力检测与缓解AI核心安全风险

LlamaFirewall 是一款面向大语言模型(LLM)应用的系统级安全框架,采用模块化设计支持分层自适应防御。该框架旨在缓解各类AI代理安全风险,包括越狱攻击(jailbreaking)、间接提示注入(indirect pr…

java基础知识回顾3(可用于Java基础速通)考前,面试前均可用!

目录 一、基本算数运算符 二、自增自减运算符 三、赋值运算符 四、关系运算符 五、逻辑运算符 六、三元运算符 七、 运算符的优先级 八、小案例:在程序中接收用户通过键盘输入的数据 声明:本文章根据黑马程序员b站教学视频做的笔记,可…

电脑无法识别打印机usb设备怎么办 一键解决!

在当今高度数字化的工作环境中,打印机作为重要的办公设备之一,承担着文件打印、扫描等关键任务。然而,有时我们可能会遇到一个令人头疼的问题——电脑无法识别通过USB连接的打印机。这种情况不仅会影响工作效率,还可能打断正常的工…

Elasticsearch Synthetic _source

_source 字段包含索引时传入的原始 JSON 文档体。_source 字段本身不被索引(因此不可搜索),但会被存储,以便在执行获取请求(如 get 或 search)时返回。 如果磁盘使用很重要,可以考虑以下选项&a…

C++ -- vector

vector 1. 关于vector1.1 对比原生数组1.2 vector的核心优势 2. 扩容2.1 底层实现2.2 扩容过程 3. 构造函数4. 接口模拟实现4.1 实现迭代器4.2 扩容4.3 重载[]4.4 插入和删除4.5 构造函数和析构函数 5. 迭代器失效5.1 扩容后失效5.2 越界失效 6. 深浅拷贝 1. 关于vector 1.1 对…

深入研究Azure 容器网络接口 (CNI) overlay

启用cni overlay 在通过portal创建aks的时候,在networking配置上,选中下面的选项即可启用。 通过CLI创建AKS 要创建具有 CNI 覆盖网络的 AKS 群集,需要在创建群集时指定 --network-plugin azure 和 --network-plugin-mode 覆盖选项。 还需要指定 --pod-cidr 选项来定义群…

Python打卡第37天

浙大疏锦行 早停策略和模型权重的保存 作业:对信贷数据集训练后保存权重,加载权重后继续训练50轮,并采取早停策略 import torch import torch.nn as nn import pandas as pd import matplotlib.pyplot as plt import torch.optim as optim fr…

使用 OpenCV 构建稳定的多面镜片墙效果(镜面反射 + Delaunay 分块)

✨ 效果概览 我们将实现一种视觉效果,模拟由许多小镜面拼接而成的“镜子墙”。每个镜面是一个三角形区域,其内容做镜像反射(如水平翻转),在视频中形成奇特的万花筒、哈哈镜、空间折叠感。 使用 OpenCV 实现“随机镜面…