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)

Python中os模块详解及习题_第1张图片

3.查看系统环境变量

import os
os.environ
print(os.environ)

Python中os模块详解及习题_第2张图片

因为生成的值是一个字典,因此可以通过key值获取环境变量(对应的value值)
Python中os模块详解及习题_第3张图片

补充:

<1>查看系统信息
Python中os模块详解及习题_第4张图片

在这里插入图片描述
在这里插入图片描述

<2>查看系统环境变量

env:显示当前用户的环境变量
export:显示当前导出成用户变量的shell变量

当你开机后,你有没有想过为什么有默认用户身份,而不是别的用户?为什么默认路径会是它的家目录,能不能修改?这些你都能在诸多的环境变量中找到答案

Python中os模块详解及习题_第5张图片

<3>查看服务端口

查看当前所有的端口
Python中os模块详解及习题_第6张图片

查看端口的使用情况
Python中os模块详解及习题_第7张图片

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'))

Python中os模块详解及习题_第8张图片

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'))

Python中os模块详解及习题_第9张图片

5)获取文件名或目录名

Python中os模块详解及习题_第10张图片

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)

结果:

Python中os模块详解及习题_第11张图片

习题一:

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()

你可能感兴趣的:(Python)