【Python】文件操作:os标准库和常用第三方库

原文作者:我辈理想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

系列文章目录

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


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


前言

从学习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 Path

BASE_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 Path

BASE_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 Path

BASE_DIR = Path(__file__).resolve().parent

print(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 Path


def get_file_list(file_path):
    # 按照时间排序
    dir_list = os.listdir(file_path)
    if not dir_list:
        return
    else:
        # 注意,这里使用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_list


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

6. 通过递归获取文件夹下指定文件的字典

def loop_file(d):
	    # 获取zip文件的保存路径
	    file_dict = {}
	    # zip文件
	    if os.path.isfile(d):
	        if d.endswith('.zip'):
	            file_dict[os.path.splitext(os.path.basename(d))[0]] = d
	    # 文件夹
	    else:
	        directories = os.listdir(d)
	        for file in directories:
	            file_dict.update(loop_file(d + '/' + file))
	    return file_dict

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

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 Path

BASE_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 Path

BASE_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 Path

BASE_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还有很多相关内容需要去学习。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python标准库指的是Python官方提供的一组库,包含了许多常用的模块和功能,如文件操作、网络编程、正则表达式、日期时间、数学运算等等。使用Python标准库可以大大提高代码的效率和可读性。 以下是一些常用Python标准库: - os:提供了与操作系统交互的功能,比如文件操作、进程管理等; - sys:提供了与Python解释器交互的功能,比如获取命令行参数、修改Python运行时环境等; - datetime:提供了日期和时间的处理功能; - re:提供了正则表达式的功能; - math:提供了数学运算的功能; - random:提供了随机数生成的功能; - urllib:提供了HTTP客户端的功能; - socket:提供了网络编程的功能。 除了Python标准库外,还有许多第三方库可以用于Python开发第三方库是由Python社区开发和维护的库,可以帮助我们更快地实现一些功能,比如数据可视化、Web框架、机器学习等。 以下是一些常用Python第三方库: - numpy:提供了高效的数值计算功能; - pandas:提供了数据处理和分析功能; - matplotlib:提供了数据可视化功能; - requests:提供了HTTP客户端的功能; - Flask:提供了Web应用框架的功能; - Django:提供了Web应用框架的功能; - TensorFlow:提供了机器学习功能。 学习Python标准库第三方库可以让我们更快地实现一些功能,同时也可以提高我们的编程能力和代码质量。可以通过查看文档、阅读书籍、参加培训等方式学习Python标准库第三方库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值