pyefun.核心支持库.磁盘操作 module

提示

磁盘操作

代码示例
  1"""
  2
  3.. Hint::
  4    磁盘操作
  5
  6.. literalinclude:: ../../../pyefun/核心支持库/磁盘操作.py
  7    :language: python
  8    :caption: 代码示例
  9    :linenos:
 10
 11
 12"""
 13import os
 14import sys
 15import stat
 16import shutil
 17from .公用函数 import *
 18from .文本操作 import *
 19
 20
 21# 取磁盘总空间
 22# 取磁盘剩余空间
 23# 取磁盘卷标
 24# 置磁盘卷标
 25# 改变驱动器
 26# 改变目录 -
 27# 取当前目录 -
 28# 创建目录 -
 29# 删除目录 -
 30# 复制文件 -
 31# 移动文件 -
 32# 删除文件 -
 33# 文件更名 -
 34# 文件是否存在 -
 35# 寻找文件
 36# 取文件时间
 37# 取文件尺寸
 38# 取文件属性
 39# 置文件属性
 40# 取临时文件名
 41# 读入文件 -
 42# 写到文件 -
 43
 44
 45def 取资源文件路径(relative_path=""):
 46    """ PyInstaller 单文件解压后目录的路径  """
 47    try:
 48        base_path = sys._MEIPASS
 49    except Exception:
 50        base_path = os.path.abspath(".")
 51    return os.path.join(base_path, relative_path)
 52
 53
 54def 取运行目录():
 55    """ PyInstaller 单文件的运行目录  """
 56    if getattr(sys, 'frozen', False):
 57        return os.path.dirname(os.path.realpath(sys.argv[0]))
 58    else:
 59        return sys.path[0]
 60
 61
 62def 取当前目录():
 63    return os.getcwd()
 64
 65
 66# 调用格式: 〈逻辑型〉 复制文件 (文本型 被复制的文件名,文本型 复制到的文件名) - 系统核心支持库->磁盘操作
 67# 英文名称:FileCopy
 68# 成功返回真,失败返回假。本命令为初级命令。
 69# 参数<1>的名称为“被复制的文件名”,类型为“文本型(text)”。
 70# 参数<2>的名称为“复制到的文件名”,类型为“文本型(text)”。
 71#
 72# 操作系统需求: Windows、Linux
 73@异常处理返回类型逻辑型
 74def 复制文件(被复制的文件名, 复制到的文件名):
 75    shutil.copyfile(被复制的文件名, 复制到的文件名)
 76    return True
 77
 78
 79@异常处理返回类型逻辑型
 80def 复制目录(被复制的目录, 复制到的目录):
 81    shutil.copytree(被复制的目录, 复制到的目录)
 82    return True
 83
 84
 85# 调用格式: 〈逻辑型〉 移动文件 (文本型 被移动的文件,文本型 移动到的位置) - 系统核心支持库->磁盘操作
 86# 英文名称:FileMove
 87# 将文件从一个位置移动到另外一个位置。成功返回真,失败返回假。本命令为初级命令。
 88# 参数<1>的名称为“被移动的文件”,类型为“文本型(text)”。
 89# 参数<2>的名称为“移动到的位置”,类型为“文本型(text)”。
 90#
 91# 操作系统需求: Windows、Linux
 92@异常处理返回类型逻辑型
 93def 移动文件(被移动的文件, 移动到的位置):
 94    shutil.move(被移动的文件, 移动到的位置)
 95    return True
 96
 97
 98def 文件_目录文件列表(路径='.'):
 99    '.为单前目录,..为上级目录,目录下的文件名,文件夹名,不带路径'
100    return os.listdir(路径)
101
102
103def 文件_遍历子目录(路径='.'):
104    '成功返回列表:(路径, [包含目录], [包含文件]),用法 for root, dirs, files in os.walk("..", topdown=False):'
105    return list(os.walk(路径))
106
107
108def 文件_递归获取所有文件(路径='.'):
109    """获取文件夹下所有文件绝对路径 排查文件夹"""
110    filess = []
111    listFiles = os.listdir(路径)
112    for i in range(0, len(路径)):
113        path = os.path.join(路径, listFiles[i])
114        if os.path.isdir(path):
115            filess.extend(文件_递归获取所有文件(path))
116        elif os.path.isfile(path):
117            filess.append(path)
118    return filess
119
120
121@异常处理返回类型逻辑型
122def 创建目录(路径, 自动创建目录=True):
123    if 文件是否存在(路径):
124        return True
125    if 自动创建目录:
126        try:
127            access = 0o777
128            original_umask = os.umask(000)
129            os.makedirs(路径, access)
130        finally:
131            os.umask(original_umask)
132    else:
133        os.mkdir(路径)
134    return True
135
136
137# 调用格式: 〈逻辑型〉 写到文件 (文本型 文件名,字节集 欲写入文件的数据,... ) - 系统核心支持库->磁盘操作
138# 英文名称:WriteFile
139# 本命令用作将一个或数个字节集顺序写到指定文件中,文件原有内容被覆盖。成功返回真,失败返回假。本命令为初级命令。命令参数表中最后一个参数可以被重复添加。
140# 参数<1>的名称为“文件名”,类型为“文本型(text)”。
141# 参数<2>的名称为“欲写入文件的数据”,类型为“字节集(bin)”。
142#
143# 操作系统需求: Windows、Linux
144
145@异常处理返回类型逻辑型
146def 写到文件(文件名, 欲写入文件的数据):
147    if (type(欲写入文件的数据) == str):
148        欲写入文件的数据 = bytes(欲写入文件的数据, encoding="utf-8")
149
150    with open(文件名, 'wb') as f:
151        f.write(欲写入文件的数据)
152    return True
153
154
155def 读入文件(文件名):
156    if 文件是否存在(文件名) == False:
157        return b""
158    '方式默认用r 字节集用rb 长度默认读取全部,更多模式参考https://www.runoob.com/python3/python3-func-open.html'
159    with open(文件名, 'rb') as f:
160        return f.read(-1)
161
162
163@异常处理返回类型逻辑型
164def 删除文件(路径):
165    '成功返回True,用于删除文件,如果文件是一个目录则返回一个错误'
166    os.remove(路径)
167    return True
168
169
170@异常处理返回类型逻辑型
171def 删除目录(路径, 递归删除=False):
172    if 文件是否存在(路径) == False:
173        return False
174    if 递归删除:
175        shutil.rmtree(路径)
176    else:
177        os.rmdir(路径)
178    return True
179
180
181@异常处理返回类型逻辑型
182def 文件更名(原文件名, 新文件名):
183    '成功返回True,可以是文件或文件夹'
184    # os.rename(原文件名, 新文件名)
185    shutil.move(原文件名, 新文件名)
186
187    return True
188
189
190def 文件_路径取扩展名(路径):
191    return os.path.splitext(路径)[1]
192
193
194def 文件_取文件名(路径, 是否需要拓展名=True):
195    if 是否需要拓展名:
196        return os.path.basename(路径)
197    else:
198        return os.path.splitext(os.path.basename(路径))[0]
199
200
201def 路径_取目录名(路径):
202    return os.path.basename(路径)
203
204
205def 文件_取目录(路径):
206    '去掉文件名,返回目录路径'
207    return os.path.dirname(路径)
208
209
210@异常处理返回类型逻辑型
211def 改变目录(路径):
212    '成功返回True'
213    os.chdir(路径)
214    return True
215
216
217@异常处理返回类型逻辑型
218def 改变当前进程目录(路径):
219    '成功返回True'
220    os.chroot(路径)
221    return True
222
223
224def 文件_检查权限(路径, 权限=os.F_OK):
225    '类型:0 是否存在 1 是否可读 2 是否可写 3 是否可执行,返回True或False'
226    # {0: os.F_OK, 1: os.R_OK, 2: os.W_OK, 3: os.X_OK}
227    return os.access(路径, 权限)
228
229
230def 文件_是否为绝对路径(路径):
231    '传入路径返回True或False'
232    return os.path.isabs(路径)
233
234
235def 文件_是否为目录(路径):
236    '传入路径返回True或False'
237    return os.path.isdir(路径)
238
239
240def 文件_是否为文件(路径):
241    '传入路径返回True或False'
242    return os.path.isfile(路径)
243
244
245def 文件是否存在(路径):
246    """传入路径返回True或False/可以判断文件夹或者文件"""
247    return os.path.exists(路径)
248
249
250def 文件_取文件大小(路径):
251    '返回文件长度'
252    return os.path.getsize(路径)
253
254
255def 文件_获取文件信息(路径):
256    '成功返回(上次访问时间,修改时间,文件大小),返回的是10位时间戳'
257    结果 = os.stat(路径)
258    return (结果.st_atime, 结果.st_mtime, 结果.st_size)
259
260
261def 文件_修改文件时间(路径, 时间):
262    '成功返回True,传入的时间为10位时间戳元组类型(访问时间戳,修改时间戳)'
263    os.utime(路径, 时间)
264    return True
265
266
267# 调用格式: 〈日期时间型〉 取文件时间 (文本型 文件名) - 系统核心支持库->磁盘操作
268# 英文名称:FileDateTime
269# 返回指定文件被创建或最后修改后的日期和时间。如果该文件不存在,将返回100年1月1日。本命令为初级命令。
270# 参数<1>的名称为“文件名”,类型为“文本型(text)”。
271#
272# 操作系统需求: Windows、Linux
273def 取文件访问时间(路径):
274    '返回时间戳'
275    return os.path.getatime(路径)
276
277
278def 取文件创建时间(路径):
279    '返回时间戳'
280    return os.path.getctime(路径)
281
282
283def 取文件修改时间(路径):
284    '返回时间戳'
285    return os.path.getmtime(路径)
286
287
288def 文件_修改权限(路径, 权限=stat.S_IRWXU):
289    'http://www.runoob.com/python/os-chmod.html'
290    # stat.S_IREAD 只读
291    # stat.S_IWRITE 取消只读
292    # stat.S_IRWXU 读写执行
293    return os.chmod(路径, 权限)
294
295
296def 文件_枚举(欲寻找的目录=".", name=".jpg", 递归子目录=True):
297    list = []
298    for item in os.listdir(欲寻找的目录):
299        item_path = os.path.join(欲寻找的目录, item)
300        if os.path.isdir(item_path):
301            if (递归子目录):
302                newlist = 文件_枚举(item_path, name, 递归子目录)
303                for item_path in newlist:
304                    list.append(item_path)
305        elif os.path.isfile(item_path):
306            if name in item:
307                list.append(item_path)
308    return list
309
310
311def 目录_枚举(欲寻找的目录=".", 递归子目录=True):
312    list = []
313    for item in os.listdir(欲寻找的目录):
314        item_path = os.path.join(欲寻找的目录, item)
315        if os.path.isdir(item_path):
316            list.append(item_path)
317            if (递归子目录):
318                newlist = 目录_枚举(item_path, 递归子目录)
319                for item_path in newlist:
320                    list.append(item_path)
321    return list
322
323
324def 文件_删除(欲删除的文件名: str) -> bool:
325    return 删除文件(欲删除的文件名)
326
327
328def 文件_取扩展名(路径: str) -> str:
329    return 子文本替换(文件_路径取扩展名(路径), ".", "")
330
331
332def 文件_更名(原文件名, 新文件名) -> bool:
333    return 文件更名(原文件名, 新文件名)
334
335
336def 文件_取父目录(路径) -> str:
337    return os.path.dirname(路径)
338
339
340def 文件_写出(文件名: str, 欲写入文件的数据) -> bool:
341    dir = 文件_取父目录(文件名)
342    if 文件是否存在(dir) == False:
343        创建目录(dir)
344    return 写到文件(文件名, 欲写入文件的数据)
345
346
347@异常处理返回类型逻辑型
348def 文件_追加文本(文件名: str, 欲追加的文本: str) -> bool:
349    dir = 文件_取父目录(文件名)
350    if 文件是否存在(dir) == False:
351        创建目录(dir)
352    with open(文件名, "a") as f:
353        f.write(str(欲追加的文本) + "\n")
354    return True
355
356
357@异常处理返回类型逻辑型
358def 读入文本(文件名: str) -> str:
359    return 读入文件(文件名).decode('utf-8')
360
361
362def 文件_保存(文件名: str, 欲写入文件的数据: bytes) -> str:
363    dir = 文件_取父目录(文件名)
364    if 文件是否存在(dir) == False:
365        创建目录(dir)
366        return 文件_写出(文件名, 欲写入文件的数据)
367    else:
368        data = 读入文件(文件名)
369        wdata = 欲写入文件的数据
370        if (data != wdata):
371            return 文件_写出(文件名, 欲写入文件的数据)
372    return True
373
374
375def 文件从列表中选取存在的文件路径(路径列表):
376    """
377    匹配文件是否存在 存在则返回文件路径
378    
379.. code-block:: python
380   :linenos:
381
382    labelsPath = 文件从列表中选取存在的文件路径([
383        "./model/labels.txt",
384        "/opt/labels.txt",
385        "/opt/model/labels.txt",
386    ])
387    """
388    for v in 路径列表:
389        if os.path.exists(v):
390            return v
391    return ''
392
393
394def 路径优化(path):
395    """
396    把\\ // 乱七八糟的路径转化为规整的
397    :param path:
398    :return:
399    """
400    if 寻找文本(path, "\\") > -1:
401        path = 子文本替换(path, "\\", "/")
402    if 寻找文本(path, r"\\") > -1:
403        path = 子文本替换(path, r"\\", "/")
404    if 寻找文本(path, r"//") > -1:
405        path = 子文本替换(path, r"//", "/")
406    return os.path.normpath(path)
407
408
409def 目录_取文件夹大小(path):
410    """传入路径是文件夹"""
411    size = 0.0
412    for root, dirs, files in os.walk(path):
413        size += sum([os.path.getsize(os.path.join(root, file)) for file in files])
414    size = round(size / 1024 / 1024, 2)
415    if size > 1000:
416        size = round(size / 1024, 2)
417        return str(size) + '-GB'
418    return str(size) + '-MB'
pyefun.核心支持库.磁盘操作.取当前目录()[源代码]
pyefun.核心支持库.磁盘操作.取文件修改时间(路径)[源代码]

返回时间戳

pyefun.核心支持库.磁盘操作.取文件创建时间(路径)[源代码]

返回时间戳

pyefun.核心支持库.磁盘操作.取文件访问时间(路径)[源代码]

返回时间戳

pyefun.核心支持库.磁盘操作.取资源文件路径(relative_path='')[源代码]

PyInstaller 单文件解压后目录的路径

pyefun.核心支持库.磁盘操作.取运行目录()[源代码]

PyInstaller 单文件的运行目录

pyefun.核心支持库.磁盘操作.文件_保存(文件名: str, 欲写入文件的数据: bytes) str[源代码]
pyefun.核心支持库.磁盘操作.文件_修改文件时间(路径, 时间)[源代码]

成功返回True,传入的时间为10位时间戳元组类型(访问时间戳,修改时间戳)

pyefun.核心支持库.磁盘操作.文件_修改权限(路径, 权限=448)[源代码]

http://www.runoob.com/python/os-chmod.html

pyefun.核心支持库.磁盘操作.文件_写出(文件名: str, 欲写入文件的数据) bool[源代码]
pyefun.核心支持库.磁盘操作.文件_删除(欲删除的文件名: str) bool[源代码]
pyefun.核心支持库.磁盘操作.文件_取扩展名(路径: str) str[源代码]
pyefun.核心支持库.磁盘操作.文件_取文件名(路径, 是否需要拓展名=True)[源代码]
pyefun.核心支持库.磁盘操作.文件_取文件大小(路径)[源代码]

返回文件长度

pyefun.核心支持库.磁盘操作.文件_取父目录(路径) str[源代码]
pyefun.核心支持库.磁盘操作.文件_取目录(路径)[源代码]

去掉文件名,返回目录路径

pyefun.核心支持库.磁盘操作.文件_是否为文件(路径)[源代码]

传入路径返回True或False

pyefun.核心支持库.磁盘操作.文件_是否为目录(路径)[源代码]

传入路径返回True或False

pyefun.核心支持库.磁盘操作.文件_是否为绝对路径(路径)[源代码]

传入路径返回True或False

pyefun.核心支持库.磁盘操作.文件_更名(原文件名, 新文件名) bool[源代码]
pyefun.核心支持库.磁盘操作.文件_枚举(欲寻找的目录='.', name='.jpg', 递归子目录=True)[源代码]
pyefun.核心支持库.磁盘操作.文件_检查权限(路径, 权限=0)[源代码]

类型:0 是否存在 1 是否可读 2 是否可写 3 是否可执行,返回True或False

pyefun.核心支持库.磁盘操作.文件_目录文件列表(路径='.')[源代码]

.为单前目录,..为上级目录,目录下的文件名,文件夹名,不带路径

pyefun.核心支持库.磁盘操作.文件_获取文件信息(路径)[源代码]

成功返回(上次访问时间,修改时间,文件大小),返回的是10位时间戳

pyefun.核心支持库.磁盘操作.文件_路径取扩展名(路径)[源代码]
pyefun.核心支持库.磁盘操作.文件_递归获取所有文件(路径='.')[源代码]

获取文件夹下所有文件绝对路径 排查文件夹

pyefun.核心支持库.磁盘操作.文件_遍历子目录(路径='.')[源代码]

成功返回列表:(路径, [包含目录], [包含文件]),用法 for root, dirs, files in os.walk(“..”, topdown=False):

pyefun.核心支持库.磁盘操作.文件从列表中选取存在的文件路径(路径列表)[源代码]

匹配文件是否存在 存在则返回文件路径

1 labelsPath = 文件从列表中选取存在的文件路径([
2     "./model/labels.txt",
3     "/opt/labels.txt",
4     "/opt/model/labels.txt",
5 ])
pyefun.核心支持库.磁盘操作.文件是否存在(路径)[源代码]

传入路径返回True或False/可以判断文件夹或者文件

pyefun.核心支持库.磁盘操作.目录_取文件夹大小(path)[源代码]

传入路径是文件夹

pyefun.核心支持库.磁盘操作.目录_枚举(欲寻找的目录='.', 递归子目录=True)[源代码]
pyefun.核心支持库.磁盘操作.读入文件(文件名)[源代码]
pyefun.核心支持库.磁盘操作.路径_取目录名(路径)[源代码]
pyefun.核心支持库.磁盘操作.路径优化(path)[源代码]

把// 乱七八糟的路径转化为规整的 :param path: :return: