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.核心支持库.磁盘操作.文件_遍历子目录(路径='.')[源代码]¶
成功返回列表:(路径, [包含目录], [包含文件]),用法 for root, dirs, files in os.walk(“..”, topdown=False):