python模块-os、sys

摘要

本文部分内容来源于网络,个人收集整理,请勿传播

本文记录一些python中os和sys模块的常用方法

os

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
## dir
os.getcwd()
#获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")
#改变当前脚本工作目录;相当于shell下cd
os.curdir
#返回当前目录: ('.')
os.pardir
#获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')
#可生成多层递归目录
os.removedirs('dirname1')
#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')
#生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')
#删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')
#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

## file
os.remove()
#删除一个文件
os.rename("oldname","newname")
#重命名文件/目录
os.stat('path/filename')
#获取文件/目录信息

## other
os.sep
#输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep
#输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep
#输出用于分割文件路径的字符串
os.name
#输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")
#运行shell命令,直接显示
os.environ
#获取系统环境变量

## os.path
os.path.isfile(path)
#如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)
#如果path是一个存在的目录,则返回True。否则返回False
os.path.abspath(path)
#返回绝对路径
os.path.basename(path)
# 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.commonprefix(list)
#返回list(多个路径)中,所有path共有的最长的路径。
os.path.dirname(path)
#返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.exists(path)
#如果path存在,返回True;如果path不存在,返回False
os.path.lexists
#路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)
#把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)
#根据环境变量的值替换path中包含的”$name”和”${name}”
os.path.getatime(path)
#返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)
#返回path所指向的文件或者目录的最后修改时间
os.path.getctime(path)
#返回path的大小
os.path.getsize(path)
#返回文件大小,如果文件不存在就返回错误
os.path.isabs(path)
#判断是否为绝对路径
os.path.islink(path)
#判断路径是否为链接
os.path.ismount(path)
#判断路径是否为挂载点()
os.path.join(path1[, path2[, ...]])
#把目录和文件名合成一个路径
os.path.normcase(path)
#转换path的大小写和斜杠
os.path.normpath(path)
#规范path字符串形式
os.path.realpath(path)
#返回path的真实路径
os.path.relpath(path[, start])
#从start开始计算相对路径
os.path.samefile(path1, path2)
#判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)
#判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)
#判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path)
#把路径分割成dirname和basename,返回一个元组
os.path.splitdrive(path)
#一般用在windows下,返回驱动器名和路径组成的元组
os.path.splitext(path)
#分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path)
#把路径分割为加载点与文件
os.path.walk(path, visit, arg)
#遍历path,进入每个目录都调用visit函数,visit函数必须有
3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有
文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames
#设置是否支持unicode路径名
1
2
3
4
5
6
7
8
9
10
11
12
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
>>> os.path.normcase('c:/windows\\system32\\')
'c:\\windows\\system32\\'


规范化路径,如..和/
>>> os.path.normpath('c://windows\\System32\\../Temp/')
'c:\\windows\\Temp'

>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
os路径处理
#方式一:推荐使用
import os
#具体应用
import os,sys
possible_topdir = os.path.normpath(os.path.join(
os.path.abspath(__file__),
os.pardir, #上一级
os.pardir,
os.pardir
))
sys.path.insert(0,possible_topdir)


#方式二:不推荐使用
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

sys

1
2
3
4
5
6
7
8
sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]

模拟打印进度条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
#=========知识储备==========
#进度条的效果
[# ]
[## ]
[### ]
[#### ]

#指定宽度
print('[%-15s]' %'#')
print('[%-15s]' %'##')
print('[%-15s]' %'###')
print('[%-15s]' %'####')

#打印%
print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义

#可传参来控制宽度
print('[%%-%ds]' %50) #[%-50s]
print(('[%%-%ds]' %50) %'#')
print(('[%%-%ds]' %50) %'##')
print(('[%%-%ds]' %50) %'###')


#=========实现打印进度条函数==========
import sys
import time

def progress(percent,width=50):
if percent >= 1:
percent=1
show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')


#=========应用==========
data_size=1025
recv_size=0
while recv_size < data_size:
time.sleep(0.1) #模拟数据的传输延迟
recv_size+=1024 #每次收1024

percent=recv_size/data_size #接收的比例
progress(percent,width=70) #进度条的宽度70