python学习笔记——os模块的练习

2 篇文章 0 订阅
2 篇文章 0 订阅

学习要点

如果我们要通过python来操作文件、目录,可以调用os等模块的接口

调用函数作用
os.name获取操作系统类型
os.uname()获取操作系统详细信息(只有linux系统有这个方法)
os.environ获取所有环境变量
os.environ.get(‘key’)获取某环境变量
os.path.abspath(’.’)查看当前目录的绝对路径
os.path.join(‘E:\python代码’,‘testdir’)在“E:\python代码”目录下创建“testdir”目录,并将新目录的完整路径表示出来
os.chdir(‘E:\python代码’)修改当前路径为“E:\python代码”
os.mkdir(‘haha’)在当前目录下创建一个名为“haha”的文件夹
os.rmdir(‘haha’)在当前目录下删除一个名为“haha”的文件夹
os.getcwd()获取当前工作目录

练习与问题

1、使用os模块,在windows环境下写出linux中ls -l的功能
在这里插入图片描述
为详细了解ls -l各个字段的意思,我翻阅学习了https://blog.csdn.net/sjzs5590/article/details/8254527
drwxr-xr-x 12 admin root 4096 Nov 16 09:06 usr

字段含义获取方法
d文件类型后续补充
rwxr-xr-x文件权限os.stat(path)
2链接数(子目录数)os.stat(path).st_nlink
admin所属用户为adminos.stat(path).st_uid
root所属用户组为rootos.stat(path).st_gid
4096文件大小4096字节os.stat(path).st_size
Nov 16 09:06时间为11月16号9点06分os.stat(path).st_mtime(时间戳需转换)
usr目录名为usrx for x in os.listdir()

我的思路是循环获取文件名称,然后将文件的信息通过os模块下的方法获取,之后每个字段之间添加适当间隔,拼接成一个str,然后循环隔行打印。那么问题来了,这些信息具体用os模块的什么方法获取?查询了相关链接,找到了os.stat()方法和time.locate()方法
附上代码

import os
import time

print('权限\t\t文件数\t用户名\t群组名\t大小\t月份\t日期\t时间\t文件名')
path = r'E:\python代码'

def mod_english(mod):	#将权限777转换为'wrxwrxwrx'
    s = ''
    i = 0
    for x in mod:
        s = s + bin(int(x,8))[2:]
    l = list (s)
    for power in l:
        if i%3 == 0:
            if power == '1':
                l[i] = 'r'
            else:
                l[i] = '-'
        if i%3 == 1:
            if power == '1':
                l[i] = 'w'
            else:
                l[i] = '-'
        if i%3 == 2:
            if power == '1':
                l[i] = 'x'
            else:
                l[i] = '-'
        i += 1
    return ''.join(l)	#返回权限对应字符串

for name in os.listdir()	#循环打印每个文件的信息
    stat = os.stat(name)	#获取文件stat对象
    mod = oct(stat.st_mode)[-3:]    #返回十进制int需要用oct(int)转换为8进制,[-3:]切片最后三位就是权限,例如777
    fullpath = os.path.join(path,name)  #拼接绝对路径,因为isdir()和isfile()必须要用绝对路径才能正常使用
    if os.path.isdir(fullpath):
        filetype = 'd'
    elif os.path.isfile(fullpath):
        filetype = '-'
    else:
        filetype = '?'
    print(
    filetype +  #文件类型
    mod_english(mod) + '\t' +   #权限
    str(stat.st_nlink) +'\t' +  #文件数
    str(stat.st_uid) + '\t' +   #用户名
    str(stat.st_gid)+ '\t' +    #群组名
    str(stat.st_size) + '\t' +  #大小
    time.strftime('%b\t%d\t%H:%M',time.localtime(stat.st_mtime))+ '\t' +    #月份   日期    时间
    name 
    )

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值