系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
相关的内容比较多,还在整理中
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 一、文件是什么?
- 二、获取文件夹中的文件
- (一)获取当前文件夹(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还有很多相关内容需要去学习。