Python基础 - 文件处理(下)
主要是介绍两个文件处理的内置模块 os, pathlib. 上篇对文件的读写基本搞定了. 当然, 因为我做数据的嘛, 我的日常并不是简单的读写下文件, 而是重在读取数据后, 各种复杂的操作. 用到的更多是 pandas 这样的库来做数据分析. 也因为强大的 pandas, 其实比 excel 更加灵活和强大, 也是我以前做 办公自动化的首先工具.
还是回到正题, 文件处理. 通常就是获取一个文件夹下的所有文件, 或者提取特定文件, 读取数据, 创建文件夹, 文件这些繁琐的事情, 其实也不是很难, 逻辑清楚了, 边用边百度就能搞定.
OS
也只是一常用到的函数.
常用的-增删改查
import os
# 获取当前路径
os.getcwd()
'E:\\Jupyter notes\\Python_data_struct'
# 获取某路径下的所有文件
os.listdir()
['.git', '.gitignore', '.idea', 'pythonds', 'test.py', 'test2.py', 'test副本py']
# 删除文件
os.remove('test副本py')
os.listdir()
['.git', '.gitignore', '.idea', 'pythonds', 'test.py', 'test2.py']
# 判断某文件是否存在
if os.path.exists("hello.py"):
print("yes")
else:
print('no')
no
# 创建文件夹
os.mkdir('my_dir')
os.listdir()
['.git', '.gitignore', '.idea', 'my_dir', 'pythonds', 'test.py', 'test2.py']
# 改变目录
os.chdir(path)
栗子 - 判断文件
import os
def file_check():
# 获取当目录下的所有文件
file_list = os.listdir(os.getcwd())
if not file_list:
return
for file in file_list:
if os.path.isdir(file):
print(file, 'is a dir')
elif os.path.isfile(file):
print(file, 'is a file')
elif os.path.islink(file):
print(file, 'is a link')
else:
print(file, 'en, en , en')
if __name__ == '__main__':
file_check()
.git is a dir
.gitignore is a file
.idea is a dir
my_dir is a dir
pythonds is a dir
test.py is a file
test2.py is a file
最直接的用, 用过 linux 就知道, 最为常见的命令, 不就是 ls 嘛. 不就是 这里的 os.listdir() 呀. 一样的功能. 然后判断时是否是文件, 还是文件夹, 若为文件夹, 则继续 ls ... 想想, 这不就是一个递归的过程嘛, 什么批量改名文件, 什么多层目录文件递归拷贝, 都是一样的逻辑, 蛮简单的, 不想写了, 有个印象就行, 还是重点在于库的大概知道就好.
glob
这个内置模块, 就专门用来, 查找特定文件的, 简直无敌强. 文档是这样说的, 非常详细.
比如上栗, 就不用遍历整个目录判断每个文件是不是符合。
The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order. No tilde expansion is done, but *, ?, and character ranges expressed with [] will be correctly matched. This is done by using the os.scandir() and fnmatch.fnmatch() functions in concert, and not by actually invoking a subshell. Note that unlike fnmatch.fnmatch(), glob treats filenames beginning with a dot (.) as special cases. (For tilde and shell variable expansion, use os.path.expanduser() and os.path.expandvars().)
我看了下它的源代码, 其实就是用 re 和 os 的部分功能封装而已, 也不是说很厉害的样子.
”*” 匹配0个或多个字符;
”?” 匹配单个字符;
”[ ]” 匹配指定范围内的字符,如:[0-9]匹配数字。
import glob
# 匹配当前所有的文件
glob.glob("*")
['123.txt', 'my_dir', 'pythonds', 'test.py', 'test2.py']
# my_dir 文件夹下的所有文件, 不存在则 [], 不报错
glob.glob('my_dir/*')
['my_dir\\a.txt', 'my_dir\\b.txt', 'my_dir\\c_dir']
# 匹配出当前所有后缀为 .txt 的文件
glob.glob('*.txt')
['123.txt', '测试.txt']
# 特定文件名的
glob.glob('12*.txt')
['123.txt']
# 以迭代器的方式, 不用一下全查出来, 节省内存
g = glob.iglob('*.txt')
g
<generator object _iglob at 0x000001E652CFA360>
list(g)
['123.txt', '测试.txt']
基本常用的文件操作也就这些.
pathlib
从3.4以后, 说是 面向对象的文件系统路径. 用得多一点就是里面的 Path 类多一些.
对于底层的路径字符串操作,你也可以使用
os.path模块。
也不算是对 os.path 的完善啥的, 就使用上更加 pythonic 一点, 网上找了一些栗子参考一波就行了, 用到可在看看文档即可.
令人困惑的 os.path.join()
每次字符串拼接,我都要先测试一波, 就从未记住过. 跟 json 的 dumps(), loads() 一样的, 从未记住, 只能测试.
# 字符串 -> 列表 => split()
lst = "I am little prince".split()
print(lst)
# 列表 -> 字符 => join()
my_str = ', '.join(lst)
print(my_str)
['I', 'am', 'little', 'prince']
I, am, little, prince
import os.path
# 创建文件夹 src, 里面再建一个 demo 文件夹
os.makedirs(os.path.join('src', 'demo'), exist_ok=True)
# 123.txt 不存在则报错. 并其路径改为 src/123.txt (文件改名和移动)
os.rename('123.txt', os.path.join('src', '1234.txt'))
join() 是真的容易被搞混淆的一个函数哦. 同样的功能, 用 pathlib 则就非常优雅了.
from pathlib import Path
Path('src/demo').mkdir(parents=True, exist_ok=True)
# 重命名文件 并 移动
Path('123.txt').rename('src/1234.txt')
这种面向对象的风格, 真实太爽了.
# Path(Purpath) 默认的是纯路径, 但我就是要相对路径, 这暂时不知咋弄.
g = Path.cwd().glob('*.txt')
list(g)
[WindowsPath('E:/Jupyter notes/Python_data_struct/测试.txt')]
... 暂时不举例了.. 有个印象就行了.
对于文件处理, 不就是这写读写文件, 文件判断这些嘛, 假设中间的数据处理, 这其实就是文件批处理和自动化呀. 我感觉, 后面我单独搞一波分支,专门来搞办公自动化, 应该可以..文件操作就暂时这样吧.
Python基础 - 文件处理(下)的更多相关文章
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python 基础-文件读写'r' 和 'rb'区别
原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...
- python遍历文件夹下的文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
- python 读取文件夹下的图片进行处理
python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...
- python 遍历文件夹下的所有文件
基础 import os # 遍历文件夹 def walkFile(file): for root, dirs, files in os.walk(file): # root 表示当前正在访问的文件夹 ...
- Python将文件夹下的文件名写入excel方便统计
如题,贴代码: 1 ''' 2 #python将某文件夹下的文件名存储到excel中 3 ''' 4 5 #导入所需模块 6 import os 7 import xlwt 8 9 #定义要处理的文件 ...
- python 查找文件夹下以特定字符开头的某类型文件 - os.walk
Python os.walk() 方法 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下.os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处 ...
- python 替换 文件夹下的 文件名称 及 文件内容
示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...
- Python基础--文件操作和集合
这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 ...
- python基础--文件操作实现全文或单行替换
python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...
随机推荐
- thymeleaf 使用th:onclick传递参数问题:
使用方法:注意:传递参数时如果参数是数字这样写没有问题,但是如果参数是字符串onclick的方法将无法接收到参数并报错,所以参数是字符串时要加单引号.如上图.
- CDH - [01] 概述
一.什么是CDH CDH是Cloudera's Distribution Including Apache Hadoop的缩写,即Cloudera公司发布的Hadoop发行版.它是一个为Hadoo ...
- 使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
博客链接:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小 ...
- 初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容
初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容 前言 随着人工智能和计算机视觉技术的发展,利用图像识别来分析视频内容已经成为现实.本文的主要目标是: ...
- 使用nodejs安装并使用vue操作步骤
1.下载安装nodejs 官网下载nodejs并安装,我这边选择Windows的20版本 下载地址:https://nodejs.org/en/download/prebuilt-installer ...
- 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
图表图片由阿里巴巴提供 本文作者的观点:QwQ-32B 作为小型开源 AI 模型,在数学.编程等任务上表现接近甚至超越 DeepSeek-R1 671B模型,同时计算资源占用大幅降低,使其更易部署和使 ...
- SpringBoot应用调用Linkis进行任务调度执行SQl;进行数据质量分析
基于Linkis的Rest-API调用任务 官网示例:"https://linkis.apache.org/zh-CN/docs/1.3.2/api/linkis-task-operator ...
- Open R1 项目进展第一期
DeepSeek R1 发布已经两周了,而我们启动 open-r1 项目--试图补齐它缺失的训练流程和合成数据--也才过了一周.这篇文章简单聊聊: Open-R1 在模仿 DeepSeek-R1 流程 ...
- Anonymous打靶学习笔记(5)
参考视频https://www.bilibili.com/video/BV1XufaYAEKc/?spm_id_from=333.1387.search.video_card.click 常见的100 ...
- 探秘Transformer系列之(22)--- LoRA
探秘Transformer系列之(22)--- LoRA 目录 探秘Transformer系列之(22)--- LoRA 0x00 概述 0x01 背景知识 1.1 微调 1.2 PEFT 1.3 秩 ...