【python文件操作——标准库和常用第三方库】

news/2025/2/16 0:21:09/

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
相关的内容比较多,还在整理中


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、文件是什么?
  • 二、获取文件夹中的文件
    • (一)获取当前文件夹(os、path)
      • 1.通过os.getcwd()获取当前执行文件的位置
      • 2.通过Path获取当前文件夹
    • (二)获取文件夹内的文件
      • 1.获取文件列表
      • 2.获取指定文件(py文件)
    • (三)路径拼接
    • (四)路径合规和创建文件夹
    • (五)按照文件创建和修改时间排序
  • 三、文件的创建、读取、追加
    • (一)创建文件
    • (二)读取文件
    • (三)追加文件
  • 四、按照文件类型处理文件
    • (一)Excel文件类型
    • (二)Word文件类型
    • (三)Pdf文件类型
    • (四)Img文件类型
    • (五)数据库文件类型
  • 总结


前言

从学习python开始,我们就一直在用python的标准库和第三方库。基本的文件操作就是创建、获取、修改和删除。因为文件类型不同(excel、word、ppt、pdf、png、html、eps、gif、mp4、zip等),衍生出了很多第三方库。使用python处理文件是各种python开发岗位都需要的操作。主要涉及到的标准库包括io、os、sys、csv等,涉涉及常用的第三方库包括numpy、pandas、openpyxl、xlwt、xlrd、xlsxwriter、reportlab等,还有一些三方库是只创建生成包括Html2Image、folium等,也有一些库是擅长修改文件比如pillow等,还有就是压缩和解压zlib库。


提示:以下是本篇文章正文内容,下面案例可供参考

一、文件是什么?

所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。实际上文件是我们使用产生的记录信息,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。excel、word、ppt、pdf、png、html、eps、gif、mp4、zip等。

二、获取文件夹中的文件

其实我们所有看到的内容,都是通过读取文件后的展示出来的。我们需要找到一个我们要操作的文件,文件哪里来呢?第一,我们可以自己创建一个文件;第二,我们可以读取其他人的文件,或者以前创建的文件。
os 模块提供了非常丰富的方法用来处理文件和目录。简单整理了下经常用到的方法,如果想要更深入的可连接菜鸟教程

(一)获取当前文件夹(os、path)

注:os.getcwd()获取的是执行命令的文件所在位置,不是os.getcwd()所在文件的位置,如果想获取当前文件位置可以使用2的方式

1.通过os.getcwd()获取当前执行文件的位置

BASE_DIR = os.getcwd()
print(BASE_DIR)
print(type(os.getcwd()))
# 结果 
# :\Users\lpf_a\PycharmProjects\ybt_clan\test
# <class 'str'>

2.通过Path获取当前文件夹

from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent
print(BASE_DIR)
print(type(BASE_DIR))
# 结果 
# :\Users\lpf_a\PycharmProjects\ybt_clan\test
# class 'pathlib.WindowsPath'>

(二)获取文件夹内的文件

1.获取文件列表

BASE_DIR = Path(__file__).resolve().parent
files = os.listdir(BASE_DIR)
print(files)
# 结果 ['.git', '.idea', '内存泄漏.py', '文件相关.py', '深度合并dict.py', '电话组合排列.py']

2.获取指定文件(py文件)

import os
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
files = os.listdir(BASE_DIR)
print(files)for f in files:if os.path.splitext(f)[1] == '.py':print(f)if f.endswith('泄漏.py'):print(11)
# 结果 
# ['.git', '.idea', '内存泄漏.py', '文件相关.py', '深度合并dict.py', '电话组合排列.py']
# 内存泄漏.py
# 11
# 文件相关.py
# 深度合并dict.py
# 电话组合排列.py

(三)路径拼接

有时我们获取到的路径不是我们想要,需要进行拼接或删减,这是往往为了省事我们使用字符串进行拼接,我们还可以用os提供的os.path方法拼接,建议使用os.path。

import os
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
print(BASE_DIR)
# 获取上一级目录
print(BASE_DIR.parent)
# os.path.join拼接py文件完整路径
print(os.path.join(BASE_DIR, '文件相关.py'))
# str拼接py文件完整路径
uri = os.getcwd() + '\\文件相关.py'
# uri = os.getcwd() + r'\文件相关.py'
print(uri)# 结果
# C:\Users\lpf_a\PycharmProjects\ybt_clan\test
# C:\Users\lpf_a\PycharmProjects\ybt_clan
# C:\Users\lpf_a\PycharmProjects\ybt_clan\test\文件相关.py
# C:\Users\lpf_a\PycharmProjects\ybt_clan\test\文件相关.py

(四)路径合规和创建文件夹

有时候我们在操作文件路径时,是不知道有没有这个路径的,如果直接使用这个路径会报找不到错误。如果是我们向文件夹中写入内容,我们可以提前创建这个文件夹。如果是查找文件,建议针对路径人工验证,再做处理。

import os
from pathlib import PathBASE_DIR = Path(__file__).resolve().parentprint(os.listdir(BASE_DIR))
uri = os.path.join(BASE_DIR, '文件夹')
print(uri)
# 文件路径是否存在
if os.path.exists(uri):print('文件路径存在')pass
else:print('文件路径不存在')os.mkdir(uri)
# 路径是否是文件
# if os.path.isfile(uri):
#     print('文件')
#     pass
print(os.listdir(BASE_DIR))# 结果
# ['.git', '.idea', '内存泄漏.py', '文件相关.py', '深度合并dict.py', '电话组合排列.py']
# C:\Users\lpf_a\PycharmProjects\ybt_clan\test\文件夹
# 不存在
# ['.git', '.idea', '内存泄漏.py', '文件夹', '文件相关.py', '深度合并dict.py', '电话组合排列.py']

(五)按照文件创建和修改时间排序

import os
from pathlib import Pathdef get_file_list(file_path):# 按照时间排序dir_list = os.listdir(file_path)if not dir_list:returnelse:# 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列# os.path.getmtime() 函数是获取文件最后修改时间# os.path.getctime() 函数是获取文件最后创建时间dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)), reverse=True)# 返回文件+时间的列表# dir_list = [[x, os.path.getmtime(os.path.join(file_path, x))] for x in dir_list]return dir_listif __name__ == '__main__':BASE_DIR = Path(__file__).resolve().parentprint(get_file_list(BASE_DIR))
# 结果 ['文件相关.py', '.idea', '.git', '电话组合排列.py', '深度合并dict.py', '内存泄漏.py']

三、文件的创建、读取、追加

python内置open() 函数,用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。注意:使用 open() 函数一定要保证关闭文件对象,即调用 close() 函数。open的使用一般都是通过with,可以不应每次调用close() 函数。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

文件打开模式含义如果路径不存在
r(只读)为了读取,打开一个已存在文件报错
w(只写)为了写入,打开一个文件建立新文件
a (追加)向文本文件尾部追加写入,打开一个已存在文件创建新文件
所有+b已二进制的方式进行rwa同rwa模式
所有++打开一个文件进行更新(可读可写)。同rwa模式

(一)创建文件

import os
import time
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
print(os.listdir(BASE_DIR))
file = os.path.join(BASE_DIR, 't1.txt')
now_time = time.time()
print(now_time)
with open(file, 'w') as time_file:time_file.write(str(now_time))
print(os.listdir(BASE_DIR))
# 结果
# 1673177032.08206
# ['.git', '.idea', '内存泄漏.py', '文件夹', '文件相关.py', '深度合并dict.py', '电话组合排列.py']
# ['.git', '.idea', 't1.txt', '内存泄漏.py', '文件夹', '文件相关.py', '深度合并dict.py', '电话组合排列.py']

(二)读取文件

import os
import time
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
file = os.path.join(BASE_DIR, 't1.txt')
now_time = time.time()
with open(file, 'r') as time_file:print(time_file.read())        # print(time_file.readlines())# print(time_file.readline())
# 结果
# 1673177032.08206

(三)追加文件

import os
import time
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
file = os.path.join(BASE_DIR, 't1.txt')
now_time = time.time()
with open(file, 'a') as time_file:time_file.write('新增')
# 结果
# 1673177032.08206新增

四、按照文件类型处理文件

(一)Excel文件类型

库名称介绍参考链接
openpyxl主要针对xlsx格式的excel进行读取和编辑通过openpyxl 管理像数据库一样管理数据
xlrd从excel中读取数据,支持xls、xlsx
xlwt对excel进行修改操作,不支持对xlsx格式的修改
xlsxwriter用来生成excel表格,插入数据、插入图标等表格操作,不支持读取
pandas以dataframe的格式读取

(二)Word文件类型

库名称介绍参考链接
docxtpl用于读取、写入和创建子文档
python-docx用于创建和更新Microsoft Word(.docx)文件的python库
pypiwin32从Python访问许多Windows API的权限

(三)Pdf文件类型

Pdf的第三方库推荐使用reportlab,我之前整理了部分reportlab的重要功能,也可以参考官方文档,这里我就不展开介绍了。

(四)Img文件类型

库名称介绍参考链接
opencv一个 Python 绑定库,旨在解决计算机视觉问题
pillow为Python解释器添加了图像处理功能
Html2Image一个轻量级的Python包,它作为现有web浏览器无头模式的包装器,从URL和HTML+CSS字符串或文件生成图像

(五)数据库文件类型

库名称介绍参考链接
pymysql用于和mysql数据库的交互
sqlalchemy用于和mysql数据库的交互
cx_Oracle用于和oracle数据库的交互
python-oracledb用于和oraclel数据库的交互cx_Oracle的升级版,官方文档
sqlite3内置库,用于和sqlite数据库的交互
pymongo用于和mongodb非关系型数据库的交互
redis、pyredis用于和redis非关系型数据库的交互

总结

提示:这里对文章进行总结:

以上就是今天要讲的内容,本文仅仅简单介绍了文件操作的使用,整理了日常用到的一些代码,python还有很多相关内容需要去学习。


http://www.ppmy.cn/news/10833.html

相关文章

DC-DC PCB layout经验-含走线宽度和载流量表格

在DC-DC芯片的应用设计中&#xff0c;PCB布板是否合理对于芯片能否表现出其最优性能有着至关重要的影响。不合理的PCB布板会造成芯片性能变差如线性度下降&#xff08;包括输入线性度以及输出线性度&#xff09;、带载能力下降、工作不稳定、EMI辐射增加、输出噪声增加等&#…

如何做好项目管理

项目管理概述 什么是项目 项目 是为创造独特的产品、服务或者成果而进行的临时性工作 项目三要素&#xff1a;临时性、独特性、渐进明确性 什么是项目管理 项目管理通过合理运营和整合项目相关活动&#xff0c;以满足项目目标达成的过程 项目与日常工作的区别 项目&…

《收获,不止Oracle》索引细化

1.索引知识图框 2.索引探秘 2.1 BTREE索引 索引是建在表的具体列上的&#xff0c;其存在的目的是让表的查询变得更快&#xff0c;效率更高。表记录丢失关乎生死&#xff0c;而索引丢失只需重建即可。 索引却是数据库学习中最实用的技术之一。谁能深刻地理解和掌握索引的知识&…

HDMI接口电路设计

HDMI是一个能传输高清视频和多声道音频的接口&#xff0c;常用的有TYPE A&#xff0c;TYPEC&#xff0c;和TYPE D的HDMI&#xff0c;最常用的是这种TYPE A的HDMI接口&#xff0c;这个是母座HDMI TYPE A插座的引脚信号定义大家可以看下&#xff0c;总共包含19个引脚。其中TMDS d…

【小样本基础】有监督小样本,半监督小样本,无监督小样本

本篇博客探讨的主要是小样本的分类问题 目录 1. 问题定义2. 有监督小样本分类3. 半监督小样本分类3.1 基于一致性约束的方法3.2 基于伪标注的方法4. 无监督小样本分类4.1 基于预置任务的无监督学习4.2 基于对比学习的方法1. 问题定义 小样本分类问题是指只在给定少量的有标注训…

UDS诊断系列介绍04-10会话服务

本文框架1. 系列介绍10服务概述2. 10服务请求与应答2.1 10服务请求2.2 肯定应答2.3 否定应答1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是面向整车所有ECU的一种诊断通信方式&#xff0c;是基于ISO 14…

第四十二章 动态规划——数字三角形模型

第四十二章 动态规划——数字三角形模型一、数字三角形模型1、什么是数字三角形模型二、例题1、AcWing 1015. 摘花生&#xff08;1&#xff09;问题&#xff08;2&#xff09;思路状态表示状态转移循环设计初末状态&#xff08;3&#xff09;代码2、AcWing 1018. 最低通行费&am…

PDF拆分成多个页面怎么办?这三个方法让你实现将文件拆分成多页

PDF是我们常见的文件格式之一&#xff0c;在日常办公中&#xff0c;我们经常会将WORD、PPT、EXCEL等文档转换成PDF的格式后再进行传输&#xff0c;这样不仅传输速度快&#xff0c;格式也不会出现乱码的情况&#xff0c;但在一些特殊的场景下&#xff0c;我们也需要将一份完整的…