Python中os模块详解及习题
1.查看操作系统类型
import os
print(os.name)
结果:
posix,表示linux操作系统,如果是nt,是windows操作系统
注意:linux 是一款系统内核,不是操作系统;Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GUN工程各种工具和数据库的操作系统。
2.系统的详细信息
import os
info = os.uname()
print(info)
print(info.sysname)
print(info.nodename)
3.查看系统环境变量
import os
os.environ
print(os.environ)
因为生成的值是一个字典,因此可以通过key值获取环境变量(对应的value值)
补充:
<1>查看系统信息
<2>查看系统环境变量
env:显示当前用户的环境变量
export:显示当前导出成用户变量的shell变量
当你开机后,你有没有想过为什么有默认用户身份,而不是别的用户?为什么默认路径会是它的家目录,能不能修改?这些你都能在诸多的环境变量中找到答案
<3>查看服务端口
查看当前所有的端口
查看端口的使用情况
4.文件路径相关
1)判断是否为绝对路径
import os
os.path.isabs('/mnt/passwd')
print(os.path.isabs('/mnt/passwd'))
print(os.path.isabs('data.txt'))
结果:
True
False
2)生成绝对路径
import os
print(os.path.abspath('data.txt'))
print(os.path.abspath('hello.png'))
3)指定绝对路径——只会对两段字符串连接并不会判断有没有这个绝对路径
import os
print(os.path.join('/home/kiosk','hello.png'))
结果:
/home/kiosk/hello.png
4)用.来拼接——同样不会判断
import os
print(os.path.join(os.path.abspath('.'),'hello.jpg'))
5)获取文件名或目录名
5.文件、目录相关
1)创建目录/删除目录
import os
os.mkdir('img') ##创建目录
os.makedirs('img/jpg/png') ##递归创建
os.rmdir('img') ##删除目录
2)删除文件,创建文件
import os
os.mkmod('aa.txt') ##创建
os.remove('aa.txt') ##删除
3)文件重命名
import os
os.rename('data.txt','data1.txt')
4)判断文件或目录是否存在
import os
from os.path import exists,splitext,join
print(os.path.exists('data1.txt'))
结果:
True
5)分离后缀名和文件名
import os
from os.path import exists,splitext,join
print(os.path.splitext('hello.png'))
结果:
('hello', '.png')
6)将目录名和文件名分离
import os
from os.path import exists,splitext,join
print(os.path.split('/tmp/hello/python.jpg'))
结果:
('/tmp/hello', 'python.jpg')
7)遍历目录和遍历文件
<1>遍历目录
for root,dir,files in os.walk('/var/log'):
print(root)
print(files)
print(dir)
for name in files:
print(join(root,name))
<2>遍历文件
from collections import Iterable
f = open('/mnt/test')
print(isinstance(f,Iterable))
for i,item in enumerate(f):
if i == 10:
break
print(i,item)
结果:
习题一:
1) 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(如:X4G5.png)
2)将当前img目录所有以.png结尾的后缀名改为.jpg
def gen_code(len=4):
#随机生成4位验证码
li = random.sample(string.ascii_letters + string.digits,len)
#将列表元素拼接为字符串
return ''.join(li)
def create_files():
#随机生成100个验证码
li = [gen_code() for i in range(100)]
os.mkdir('img')
for name in li:
os.mknod('img/' + name + '.png')
# create_files()
def modify_suffix(dirname,old_suffix,new_suffix):
"""
:param dirname: 要操作的目录
:param old_suffix: 之前的后缀名
:param new_suffix: 新的后缀名
:return:
"""
if os.path.exists(dirname):
#找出所有以old_suffix结尾的文件名
pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))
#将文件名和后缀分开
basefiles = [os.path.splitext(filename)[0] for filename in pngfile]
#文件重命名
for filename in basefiles:
oldname = os.path.join(dirname,filename+old_suffix)
newname = os.path.join(dirname,filename+new_suffix)
os.rename(oldname,newname)
print('%s重命名为%s成功' %(oldname,newname))
else:
print('%s不存在,无法操作...' %dirname)
modify_suffix('dir','.jpg','.png')
习题二:京东二面笔试题
1) 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
2) 读取ips.txt文件统计这个文件中ip出现频率排前10的ip
解法一:
import random
f = open('ips.txt','a+')
for i in range(1200):
f.write('172.25.254.' + str(random.randint(1,255)) + '\n')
f.seek(0)
d = {}
for i in f.readlines():
if i in d:
d[i]+=1
else:
d[i]=1
sort = sorted(d.items(),key=lambda x:x[1],reverse=True)[:10]
for i in sort:
print(i[0])
解法二:
import random
def create_ip_file(filename):
ip =['172.25.254.' + str(i) for i in range(0,255)]
print(random.sample(ip,1))
# print(ip)
with open(filename,'a+') as f:
for count in range(1200):
f.write(random.sample(ip,1)[0] + '\n')
create_ip_file('ips.txt')
def sorted_by_ip(filename,count=10):
ips_dict = dict()
with open(filename) as f:
for ip in f:
if ip in ips_dict:
ips_dict[ip] += 1
else:
ips_dict[ip] = 1
sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse=True)[:count]
return sorted_ip
print(sorted_by_ip('ips.txt'))
习题三:
生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B
01-AF-3B-xx
01-AF-3B-xx-xx
01-AF-3B-xx-xx-xx
import string
import random
#随机生成一个MAC地址的函数
def creat_mac():
MAC= '01-AF-3B'
# 生成16进制的数
hex_num = string.hexdigits
# 0123456789abcdefABCDEF
for i in range(3):
# 从16进制字符串中随机选出2个数来(返回值为列表)['a', 'd']
n = random.sample(hex_num,2)
# 拼接列表中的内容,将小写字母转换为大写-AD
sn = '-' + ''.join(n).upper()
MAC += sn
return MAC
#主函数,随机生成100个MAC地址
def main():
# 以写的方式打开文件
with open('mac.txt','w') as f:
for i in range(100):
mac= creat_mac()
print(mac)
# 每生成一个MAC地址,存入文件(注意换行)
f.write(mac+'\n')
main()
更多推荐
所有评论(0)