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 ...
随机推荐
- WPF 事件实现MVVM中的Command绑定
1. 在ViewModel中弹出消息提示框,需要添加下面的代码块: <dxmvvm:Interaction.Behaviors> <dx:DXMessageBoxService /& ...
- QT5笔记:5. QtCreator 的快捷键
常用的快捷键: F4 同名头文件和源文件之间切换 F2 声明和定义切换 Ctrl + / 注释 F10\F11 单步调试
- autMan奥特曼机器人-内置Redis
autMan内置了redis服务,有的脚本运行需要redis支持 几个注意事项: 启用redis服务后要重启autMan生效,关闭一样的道理. 启用redis服务后会增加约200M的内存占用 多个au ...
- JUC并发—14.Future模式和异步编程分析
大纲 1.FutureTask(Future/Callable)的使用例子 2.FutureTask(Future/Callable)的实现原理 3.FutureTask(Future/Callabl ...
- AtCoder Beginner Contest 396-e
原题链接 思路 看到这道题,很明显就能发现这道题其实跟图论有关,将\(A\)数组看成一张无向图,每一个节点\(i\)的点权就是\(A_i\),每两个节点\(i\)和\(j\)之间的边权就是\(A_i ...
- winform 实现太阳,地球,月球 运作规律https://www.cnblogs.com/axing/p/18762710
无图眼吊(动图) 缘由 最近我太太在考公学习,给我出了两道高中地理知识的题目,把我问的一头雾水,题目是这样的 第一题 第二题 看到这两道题,当时大脑飞速运转,差点整个身体都在自转了,所以产生了个 ...
- 【Pre】预习测试-Logisim/Verilog/MIPS
好家伙,开门挂 T2 字符自动机cscore 1.审题·惯性思维:直接输出了当前连续数,题目要求是最大连续数 -> [重新读题解决] 2.非阻塞赋值运用:若在always块内通过if(out1 ...
- mac mamp php扩展安装
官网下载需要开启的php扩展 PHP扩展下载官网地址 解压扩展包,指定mamp所使用的php版本的phpize编译安装 # 在解压的扩展包中执行以下命令 /Applications/MAMP/bin/ ...
- 使用Docker部署服务
一.Docker概念 1.操作系统层面的虚拟化技术 2.隔离的进程独立于宿主和其它的隔离的进程 - 容器 3.GO语言开发 4.特点:高效的利用系统资源:快速的启动时间:一致的运行环境:持续交付和部署 ...
- delphi 让执行程序不在任务栏显示
Application.MainFormOnTaskbar := False; procedure TForm1.FormShow(Sender: TObject); begin ShowWindow ...