系统与文件管理模块
一、os
1、os.pardir #获取当前目录的父目录字符串名:('..') 2、os.mkdir('dirname') #创建单级目录;相当于shell中mkdir dirname 3、os.makedirs('dirname1/dirname2') #创建多级目录 4、os.removedirs('dirname1') #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 5、os.rmdir('dirname') #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 6、os.listdir('dirname') #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 7、os.remove() #删除一个文件 8、os.rename("oldname","newname") #重命名文件/目录 9、os.stat('path/filename') #获取文件/目录信息 10、os.sep #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" 11、os.linesep #输出当前平台使用的行终止符,Windows使用'\r\n',Linux and MAC使用'\n' 12、os.pathsep #输出用于分割文件路径的字符串 13、os.name #输出字符串指示当前使用平台。win->'nt'; Linux and MAC->'posix' 14、os.system("system command") #执行系统命令,完成后退出,只返回命令的执行状态(0:成功,非0:失败),不返回命令的执行结果 15、os.popen("system command") #执行系统命令,不返回命令的执行状态,实现一个“管道”可以用来返回命令的执行结果 16、os.environ #获取操作系统所有的环境变量 17、os.environ.setdefault('HOME','/home/alex') #设置系统环境变量,仅程序运行时有效 18、os.getenv("USERNAME") #获取操作系统的某个环境变量 19、os.getcwd() #得到当前工作目录,即当前Python脚本工作的目录路径 20、os.chmod(file)#修改文件权限与时间戳 21、os.chdir(dirname) #改变工作目录到dirname 22、os.get_terminal_size() #获取当前终端的大小 23、os.kill(10884,signal.SIGKILL) #杀死进程 24、os.path.abspath(path) #返回path规范化的绝对路径 25、os.path.split(path) #将path分割成目录和文件名二元组返回,例如:os.path.split('/home/code/poem.txt') 结果:('/home/code','poem.txt') 26、os.path.splitext() #分离扩展名二元组返回,例如:os.path.splitext('/usr/local/test.py'),结果:('/usr/local/test', '.py') 27、os.path.dirname(path) #返回path的目录。其实就是os.path.split(path)的第一个元素 28、os.path.basename(path) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 29、os.path.exists(path) #如果path存在,返回True;如果path不存在,返回False 30、os.path.isabs(path) #如果path是绝对路径,返回True 31、os.path.isfile(path) #如果path是一个存在的文件,返回True。否则返回False 32、os.path.isdir(path) #如果path是一个存在的目录,则返回True。否则返回False 33、os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略(可以用来连接目录和文件名) 34、os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间 35、os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间 36、os.path.getsize(filename)#获取文件大小
二、sys
1、sys.argv #命令行参数List,第一个元素是程序本身路径 2、sys.exit(n) #退出程序,正常退出时exit(0) 3、sys.version #获取Python解释程序的版本信息 4、sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6、sys.platform #返回操作系统平台名称 7、sys.stdout.write('please:') #标准输出 , 引出进度条的例子, 注,在py3上不行,可以用print代替 ''' sys.stdout与print: 在python中调用print时,事实上调用了sys.stdout.write(obj+'\n') print 将需要的内容打印到控制台,然后追加一个换行符 以下两行代码等价: sys.stdout.write('hello' + '\n') print('hello') ''' 8、val = sys.stdin.readline()[:-1] #标准输入 ''' sys.stdin与input sys.stdin.readline( )会将标准输入全部获取,包括末尾的'\n',因此用len计算长度时是把换行符'\n'算进去了的,但是input( )获取输入时返回的结果是不包含末尾的换行符'\n'的。 因此如果在平时使用sys.stdin.readline( )获取输入的话,不要忘了去掉末尾的换行符,可以用strip( )函数(sys.stdin.readline( ).strip('\n'))或sys.stdin.readline( )[:-1]这两种方法去掉换行。 '''
三、stat
>>> import os >>> print os.stat("/root/python/zip.py") (33188, 2033080, 26626L, 1, 0, 0, 864, 1297653596, 1275528102, 1292892895) >>> print os.stat("/root/python/zip.py").st_mode #权限模式 33188 >>> print os.stat("/root/python/zip.py").st_ino #inode number 2033080 >>> print os.stat("/root/python/zip.py").st_dev #device 26626 >>> print os.stat("/root/python/zip.py").st_nlink #number of hard links 1 >>> print os.stat("/root/python/zip.py").st_uid #所有用户的user id 0 >>> print os.stat("/root/python/zip.py").st_gid #所有用户的group id 0 >>> print os.stat("/root/python/zip.py").st_size #文件的大小,以位为单位 864 >>> print os.stat("/root/python/zip.py").st_atime #文件最后访问时间 1297653596 >>> print os.stat("/root/python/zip.py").st_mtime #文件最后修改时间 1275528102 >>> print os.stat("/root/python/zip.py").st_ctime #文件创建时间 1292892895
#1.可以对st_mode做相关的判断,如是否是目录,是否是文件,是否是管道等。 if stat.S_ISREG(mode): #判断是否一般文件 print 'Regular file.' elif stat.S_ISLNK (mode): #判断是否链接文件 print 'Shortcut.' elif stat.S_ISSOCK (mode): #判断是否套接字文件 print 'Socket.' elif stat.S_ISFIFO (mode): #判断是否命名管道 print 'Named pipe.' elif stat.S_ISBLK (mode): #判断是否块设备 print 'Block special device.' elif stat.S_ISCHR (mode): #判断是否字符设置 print 'Character special device.' elif stat.S_ISDIR (mode): #判断是否目录 print 'directory.' ##额外的两个函数 stat.S_IMODE (mode): #返回文件权限的chmod格式 print 'chmod format.' stat.S_IFMT (mode): #返回文件的类型 print 'type of fiel.' #2.还有一些是各种各样的标示符,这些标示符也可以在os.chmod中使用,下面附上这些标示符的说明: stat.S_ISUID: Set user ID on execution. #不常用 stat.S_ISGID: Set group ID on execution. #不常用 stat.S_ENFMT: Record locking enforced. #不常用 stat.S_ISVTX: Save text image after execution. #在执行之后保存文字和图片 stat.S_IREAD: Read by owner. #对于拥有者读的权限 stat.S_IWRITE: Write by owner. #对于拥有者写的权限 stat.S_IEXEC: Execute by owner. #对于拥有者执行的权限 stat.S_IRWXU: Read, write, and execute by owner. #对于拥有者读写执行的权限 stat.S_IRUSR: Read by owner. #对于拥有者读的权限 stat.S_IWUSR: Write by owner. #对于拥有者写的权限 stat.S_IXUSR: Execute by owner. #对于拥有者执行的权限 stat.S_IRWXG: Read, write, and execute by group. #对于同组的人读写执行的权限 stat.S_IRGRP: Read by group. #对于同组读的权限 stat.S_IWGRP: Write by group. #对于同组写的权限 stat.S_IXGRP: Execute by group. #对于同组执行的权限 stat.S_IRWXO: Read, write, and execute by others. #对于其他组读写执行的权限 stat.S_IROTH: Read by others. #对于其他组读的权限 stat.S_IWOTH: Write by others. #对于其他组写的权限 stat.S_IXOTH: Execute by others. #对于其他组执行的权限
四、shutil
shutil 模块提供了大量的文件的高级操作。特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作。
1、 shutil.copyfileobj(fsrc, fdst[, length])
功能:把一个文件的内容拷贝到另外一个文件中。
2、shutil.copyfile(src, dst)
功能:拷贝文件,但不拷贝权限
3、shutil.copymode(src, dst)
功能:仅拷贝权限,内容、组、用户均不变。
4、shutil.copystat(src, dst)
功能:仅拷贝文件的状态信息,包括:mode bits, atime, mtime, flags
5、shutil.copy(src, dst)
功能:拷贝文件和文件的权限
6、shutil.copy2(src, dst)
功能:拷贝文件和文件的状态信息
7、shutil.copytree(src, dst[, symlinks=False[, ignore=None]])
功能:递归的去拷贝文件,相当于Shell中的cp -r命令
8、shutil.rmtree(path[, ignore_errors[, onerror]])
功能:递归的去删除文件,相当于Shell中的rm -rf命令
9、shutil.move(src, dst)
功能:递归的去移动文件 相当于Shell中的mv命令,可以用来重命名。
10、shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry=0, owner=None, group=None, logger=None)
功能:创建压缩包并且返回文件路径,例如:zip,tar包
base_name : 压缩包的文件名,也可以是压缩包的路径。只是文件名,则保存当前目录,否则保存到指定路径。
format:压缩包种类,'zip','tar','bztar','gztar'
root_dir:需要压缩的文件夹路径(默认当前路径)
owner:用户,默认当前用户
group:组,默认当前组
logger:用于记录日志,通常是logging.Logger对象
五、zipfile
功能:以zip的形式压缩文件,注意了这个只能压缩文件,不能压缩目录,如果压缩,也只能显示空目录。
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log') #写入
z.write('data.data')
z.close() #关闭
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall() #解压
z.close()
六、tarfile
功能:以tar的形式打包文件,这个能打包所有文件,包括目录
import tarfile
# 打包
tar = tarfile.open('your.tar','w')
#不加arcname打的是绝对路径,也就是/Users/wupeiqi/PycharmProjects/bbs2.zip,加这个表示你在your.tar中加什么文件就写什么文件名,也就是bbs2.zip
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()
# 解压
tar = tarfile.open('your.tar','r')
tar.extractall() # 可设置解压地址
tar.close()
1、tar打包不会压缩文件,所以文件的大小没有变
2、zip才会压缩,所以压缩后的文件大小会变小
3、一般情况下是先打包再压缩
七、psutil
1. #查看cpu的信息
print u"CPU 个数 %s"%psutil.cpu_count()
print u"物理CPU个数 %s"%psutil.cpu_count(logical=False)
print u"CPU uptimes"
print psutil.cpu_times()
print ""
2. #查看内存信息
mem = psutil.virtual_memory()
print u"系统总内存 %s G"%(mem.total/1024/1024/1024)
print u"系统可用内存 %s G"%(mem.available/1024/1024/1024)
mem_rate = int(mem.available)/float(mem.total)
print u"系统内存使用率 %s %%"%int(mem_rate*100)
3. #交换分区
swapmem = psutil.swap_memory()
print u"交换分区 %s G"%(swapmem.total/1024/1024/1024)
print u"交换分区可用 %s G"%(swapmem.free/1024/1024/1024)
print u"交换分区使用率 %s %%"%int(swapmem.percent)
4. #系统启动时间
print u"系统启动时间 %s"
%datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
5. #系统用户
users_count = len(psutil.users())
users_list = ",".join([ u.name for u in psutil.users()])
print u"当前有%s个用户,分别是%s"%(users_count, users_list)
6. #网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print u"网卡接收流量 %s 网卡发送流量 %s"%(bytes_rcvd, bytes_sent)
nis=psutil.net_io_counters(pernic=True)
print u"网卡 " ,tuple(nis)
7. #进程 进程的各种详细参数
import sys,psutil def show_process(pid): try: p = psutil.Process(pid) p.name() # 进程名 # p.exe() #进程的bin路径 # p.cwd() #进程的工作目录绝对路径 p.status() # 进程状态 p.create_time() # 进程创建时间 # p.uids() #进程uid信息 # p.gids() #进程的gid信息 p.cpu_times() # 进程的cpu时间信息,包括user,system两个cpu信息 # p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好 p.memory_percent() # 进程内存利用率 p.memory_info() # 进程内存rss,vms信息 p.io_counters() # 进程的IO信息,包括读写IO数字及参数 # p.connectios() #返回进程列表 p.num_threads() # 进程开启的线程数 ''' 听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息 from subprocess import PIPE p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE) ''' p.name() # p.username() except: pass ''' pids=psutil.pids() for pid in pids: show_process(pid) ''' with open(r'd:\temp\test.txt', 'w') as f: sys.stdout = f for proc in psutil.process_iter(): ''' if proc.name() == "w3wp.exe": cpu_threshold=proc.cpu_percent(interval=2)/24 print proc.name(),proc.create_time(),cpu_threshold p.terminate() proc .kill() Iterate over all ports this process is listening to for con in proc.get_connections(): con ''' pa = proc.as_dict() print( pa.get('name'), pa.get('create_time'), pa.get('pid'), pa.get('status'), pa.get('connections'), pa.get( 'open_files'), pa.get('cpu_percent'), pa.get('memory_percent'), pa.get('username'), pa.get('num_threads')) print(u"当前进程:", psutil.Process(os.getpid()).cmdline())
8. #磁盘 磁盘的使用量等等
dps=psutil.disk_partitions() for dp in dps: dp du=psutil.disk_usage('/') print u"硬盘总共容量 %s G"%(du.total/1024/1024/1024) print u"硬盘可用 %s G"%(du.free/1024/1024/1024) print u"硬盘已用 %s %%"%(du.percent)
八、subprocess
九、pip
十、conda