Python·文件和文件夹 01
① 修改当前目录,首次利用 pandas 读取 excel 表
os.chdir
import os
import pandas as pd
os.chdir('C:/aa/bb/cc')
os.chdir(r'C:\aa\bb\cc')数据 = pd.read_excel("temp.xlsx") 等同于当前路径下的 temp.xlsx 文件。print(数据)
② 字符串连接,变为 路径格式。
os.path.join()
"/".join()
P1 = 'A'
P2 = 'B'
P3 = 'C'
P4 = 'D'path = os.path.join(P1,P2,P3,P4)print("c:\\" + path)arr = [P1,P2,P3,P4]print("c:\\" + "\\".join(arr))
③ 利用 dirlist 遍历 所有文件
os.path.isdir() 判断是否是 文件夹
os.path.listdir() 获取文件夹里的 内容列表
import os
file = open("fileDir.txt",'a')def f(bootdir):for 元素 in os.listdir(bootdir):if (os.path.isdir(bootdir + 元素)):f(bootdir + 元素 + '\\')else:file.write(bootdir + 元素 + '\n')print(bootdir + 元素)f("C:\\Users\\muqua\\Desktop\\")
④ os.scandir() 更加 强大的遍历 文件夹 函数
os.scandir() 可以获取到 当前文件或文件夹的 属性,还能 方便的 判断状态
这个方法 会返回一个 可迭代的对象,不会直接返回给你 列表。因为 毕竟 每个 对象 都是 封装了很多方法的。所以当然 不能直接返回给你 字符串。
对象.name 文件名
对象.path 路径
对象.is_file() 是否是文件
对象.is_dir() 是否是文件夹
对象.stat() 显示该文件的所有属性
对象.stat().st_size 文件的体积大小
对象.stat().st_atime 文件的最近访问时间
对象.stat().st_mtime 文件的最近修改时间
对象.stat().st_ctime Windos 下 文件的创建时间
对象.stat().st_birthtime 在MAC 和 Linux 下的 创建时间
import time
import datetime as dt全部对象 = os.scandir("C:\\Users\\muqua\\Desktop\\")for 文件 in 全部对象:# print(文件.is_file())print(文件.name,文件.stat().st_size)print(文件.name,文件.stat().st_ctime,time.ctime(文件.stat().st_ctime))print(文件.name,文件.stat().st_mtime,文件.stat().st_atime,dt.datetime.fromtimestamp(文件.stat().st_atime))
time.ctime() 可以提供一个 ctime 然后返回给你一个 确切的时间,当然是 欧美习惯
import datetime as dt dt.datetime.fromtimestamp() 这个就是 我们习惯的时间格式
⑤ 遍历所有文件的 便捷方法 os.walk(最根目录,是先遍历最根目录还是子目录,需要一个callable对象当出现异常的时候会调用,是否遍历快捷方式)
这个方法会直接 返回一个 三元组给我们!非常的 规整。也非常的快速。
num = 0for 文件夹路径,子文件夹列表,文件列表 in os.walk("C:\\Users\\muqua\\Desktop\\"):for i in 文件列表:print(文件夹路径 + "\\" + i)num+=1print(num)
1.2 搜索和匹配 文件名称
① 利用字符串内置方法:startswith()
和 endswith()
num = 0for 文件夹路径,子文件夹列表,文件列表 in os.walk("C:\\Users\\muqua\\Desktop\\"):for i in 文件列表:if i.endswith(".xlsx"):print(文件夹路径 + "\\" + i)num+=1print(num)
其实 这只是 字符串 方法最简单的 一个使用效果了,字符串的 方法 你要是 玩好了。各种 效果 都有可能实现!!!
② glob 模块 (配合正则表达式 实现匹配)
import glob
oldPath = os.getcwd()os.chdir("C:\\Users\\muqua\\Desktop\\")print(glob.glob("**/*.xlsx",recursive=True))os.chdir(oldPath)
但是 glob 方法 必须是 当前的目录,所以我们要是用它的话,就得 改变 当前路径。
而且 如果 是 recursive = True
提供了 这个参数的话,你就必须是 在 正则匹配 字符串里 加上 **/
如果 是 Recuresive(递归)= True
③ fnmatch 模块 不太建议使用
fnmatch 只能 匹配当前目录下的 文件