Python之os模块案例详解

OS模块

import os

1.返回操作系统类型 :posix 是linux操作系统,nt 是windows操作系统

print(os.name)
print(\'Linux\' if os.name == \'posix\' else \'Windows\')

posix
Linux

2.操作系统的详细信息

info = os.uname()
print(info)
print(info.sysname)
print(info.nodename)

posix.uname_result(sysname=\'Linux\', nodename=\'foundation1.ilt.example.com\', release=\'3.10.0-514.el7.x86_64\', version=\'#1 SMP Wed Oct 19 11:24:13 EDT 2016\', machine=\'x86_64\')
Linux
foundation1.ilt.example.com

3.系统的环境变量

print(os.environ)
print(os.environ.get(\'PATH\'))               #通过key值获取环境变量对应的value值

environ({\'PATH\': \'/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin\', \'XAUTHORITY\': \'/run/gdm/auth-for-kiosk-VxJi8Q/database\', \'IMSETTINGS_MODULE\': \'none\', \'HISTCONTROL\': \'ignoredups\', \'XMODIFIERS\': \'@im=ibus\', \'GDMSESSION\': \'gnome-classic\', \'DBUS_SESSION_BUS_ADDRESS\': \'unix:abstract=/tmp/dbus-Pz5VvDs6Nd,guid=dda5a3ee1f3848808f16852b5d004efd\', \'XDG_CURRENT_DESKTOP\': \'GNOME-Classic:GNOME\', \'MAIL\': \'/var/spool/mail/kiosk\', \'SSH_AGENT_PID\': \'1616\', \'LD_LIBRARY_PATH\': \'.:\', \'SESSION_MANAGER\': \'local/unix:@/tmp/.ICE-unix/1446,unix/unix:/tmp/.ICE-unix/1446\', \'USERNAME\': \'kiosk\', \'LOGNAME\': \'kiosk\', \'PWD\': \'/home/kiosk/PycharmProjects/2019python\', \'PYCHARM_HOSTED\': \'1\', \'WINDOWID\': \'31457287\', \'PYTHONPATH\': \'/home/kiosk/PycharmProjects/2019python\', \'LESSOPEN\': \'||/usr/bin/lesspipe.sh %s\', \'SHELL\': \'/bin/bash\', \'QT_GRAPHICSSYSTEM_CHECKED\': \'1\', \'GNOME_DESKTOP_SESSION_ID\': \'this-is-deprecated\', \'IMSETTINGS_INTEGRATE_DESKTOP\': \'yes\', \'XDG_SESSION_DESKTOP\': \'gnome-classic\', \'LS_COLORS\': \'rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:\', \'SHLVL\': \'3\', \'QT_PLUGIN_PATH\': \'/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins\', \'QT_IM_MODULE\': \'ibus\', \'HISTSIZE\': \'1000\', \'TERM\': \'xterm-256color\', \'XFILESEARCHPATH\': \'/usr/dt/app-defaults/%L/Dt\', \'LANG\': \'en_US.utf8\', \'XDG_SESSION_ID\': \'1\', \'DISPLAY\': \':0\', \'_\': \'../jre/jre/bin/java\', \'GDM_LANG\': \'en_US.utf8\', \'PYTHONIOENCODING\': \'UTF-8\', \'DESKTOP_SESSION\': \'gnome-classic\', \'GPG_AGENT_INFO\': \'/run/user/1000/keyring/gpg:0:1\', \'USER\': \'kiosk\', \'XDG_MENU_PREFIX\': \'gnome-\', \'WINDOWPATH\': \'1\', \'VTE_VERSION\': \'3804\', \'XDG_SEAT\': \'seat0\', \'SSH_AUTH_SOCK\': \'/run/user/1000/keyring/ssh\', \'PYTHONUNBUFFERED\': \'1\', \'HOSTNAME\': \'foundation1.ilt.example.com\', \'NLSPATH\': \'/usr/dt/lib/nls/msg/%L/%N.cat\', \'GNOME_SHELL_SESSION_MODE\': \'classic\', \'KDEDIRS\': \'/usr\', \'XDG_RUNTIME_DIR\': \'/run/user/1000\', \'XDG_VTNR\': \'1\', \'HOME\': \'/home/kiosk\'})
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin

4.判断是否是绝对路径

print(os.path.isabs(\'/tmp/ffff\'))
print(os.path.isabs(\'hello.jog\'))

True
False

5.获取当前路径

print(os.getcwd())
/home/kiosk/PycharmProjects/2019python

6.生成绝对路径的三种方式

print(os.path.abspath(\'hello.png\'))
print(os.path.join(os.path.abspath(\'.\'),\'hello.jpg\'))       ## .表示当前路径
print(os.path.join(\'/home/kiosk\',\'hello.jpg\'))

/home/kiosk/PycharmProjects/2019python/hello.png
/home/kiosk/PycharmProjects/2019python/hello.jpg
/home/kiosk/hello.jpg

7.获取目录或文件名

filename = \'/1234/year/month/day/hello.jpg\'
print(os.path.basename(filename))
print(os.path.dirname(filename))

hello.jpg
/1234/year/month/day

8.返回指定目录下的所有文件名和目录名 ,返回的是一个列表

print(os.listdir(\'img\'))
[\'file1\']

9.分离后缀名和文件名

print(os.path.splitext(\'hello.jpg\'))

10.将目录名和文件名分离

print(os.path.split(\'/tmp/hello/hello.jpg\'))

11.创建目录【 mkdir / mkdir -p】

os.mkdir(\'img\')
os.makedirs(\'img/file1/file2\')

Python之os模块案例详解

不能递归删除目录,一层一层删

 os.rmdir(\'img\')
 
 OSError: [Errno 39] Directory not empty: \'img\'

12.可以删除多层递归的空目录,若目录中有文件则无法删除

os.removedirs(\'img/file1/file2\')

13.创建文件 删除文件

os.mknod(\'00_ok.txt\')
os.remove(\'00_ok.txt\')

Python之os模块案例详解

14.文件重命名

os.rename(\'data.txt\',\'data1.txt\')

15.判断文件或目录是否存在

print(os.path.exists(\'ips.txtyyyy\'))
print(os.path.exists(\'/home/kiosk/PycharmProjects/2019python/ips.txt\'))

False
True

16.判断是否是文件或者目录

print(os.path.isfile(\'ips.txt\'))
print(os.path.isdir(\'img\'))

17. 改变当前目录到指定目录中

print(os.getcwd()) 
path=\'/tmp\'
os.chdir(path)
print(os.getcwd())

/home/kiosk/PycharmProjects/2019python
/tmp

18.文件信息

Access:文件最近一次被访问的时间;当编辑器打开文件时,使用cat,more,less,grep,sed读取文件内容将会刷新 【 Access的时间,使用ls -lu可以读取当前的Access时间】

Modify:文件内容最近一次被修改的时间;当修改文件内容时Modify的时间将会刷新
【使用ls -l命令显示的是最近一次Modify时间】

Change:文件属性最近一次被修改的时间,对一个文件或则目录执行mv,chmod,chgrp命令,将会刷新Change 的时间【使用ls -lc可以查看最近一次Change的时间】

getatime()    返回最近访问时间  (浮点型秒数)
getctime()    返回文件创建时间
getmtime()    返回最近文件修改时间
getsize()    返回文件大小 (字节为单位)

———————-练习————————

    在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
    将当前img目录所有以.png结尾的后缀名改为.jpg
import random
import string
import os

def gen_code(len=4):
    # 随机生成4位验证码
    li = random.sample(string.ascii_letters+string.digits,len)
    return \'\'.join(li)
def create_file():
    # 随机生成100个验证码
    li = {gen_code() for i in range(100)}
    os.mkdir(\'img\')
    for name in li:
        os.mknod(\'img/\' + name + \'.png\')

create_file()

def modify_suffix(dirname,old_suffix,new_suffix):
    \"\"\"
    :param dirname:操作的目录
    :param old_suffix: 之前的后缀名
    :param new_suffix: 新的后缀名
    :return:
    \"\"\"
    # 1.判断查找的目录是否存在,如果不存在,报错
    if os.path.exists(dirname):
        # 2.找出所有以old_suffix(.png)结尾的文件
        pngfile = [filename for filename in os.listdir(dirname)
                   if filename.endswith(old_suffix)]
        # 3.将后缀名和文件名分开,留下文件名
        basefiles = [os.path.splitext(filename)[0]
                     for filename in pngfile]
        # 4.重命名文件
        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(\'redhat\',\'.jpg\',\'.png\')

—————–练习———————–

利用time.time()方法,我们可以计算两个时间点之间的时间间隔
但是有些时候我们想要得到/etc/group文件的a/c/m的时间
对应的年月日这些信息
并保存再文件date.txt文件中

import os
import time

time1 = os.path.getctime(\'/etc/shadow\')     #时间戳时间
print(time1)
tuple_time = time.localtime(time1)
print(tuple_time)
year = tuple_time.tm_year
month = tuple_time.tm_mon
day = tuple_time.tm_mday

with open(\'date.txt\',\'a\') as f:
    f.write(\'%d %d %d\' %(year,month,day))
    f.write(\'\\n\')

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容