千家信息网

利用os模块编写一个能实现dir -l输出的程序

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,在Linux下命令ls和dir都有相同的功能:打印当前文件夹目录。注:ls 是Linux的原装命令,dir 是原来dos的命令,Linux选择兼容了此个dos命令,所以dir和ls在功能上是一样的。1
千家信息网最后更新 2025年12月01日利用os模块编写一个能实现dir -l输出的程序

  在Linux下命令ls和dir都有相同的功能:打印当前文件夹目录。

  注:ls 是Linux的原装命令,dir 是原来dos的命令,Linux选择兼容了此个dos命令,所以dir和ls在功能上是一样的。

  1. ls命令

  常见的ls命令有:

  ls # 显示不隐藏的文件与文件夹

  ls -l # 显示不隐藏的文件与文件夹的详细信息

  ls -a # 显示当前目录下的所有文件(包含.开头的隐藏文件)

  注意:total为当前目录下所有文件占用的内存块(block)的大小,即下图第一列数值之和。

  2. Python实现dir -l 命令

  对于利用os模块编写一个能实现dir -l输出的程序,首先得了解一下各个字段的含义,请参考:

  https://baike.baidu.com/item/ls%20-l/5261110?fr=aladdin

  显然难点在于怎样获取文件权限、文件大小、文件创建时间。

  import os

  import time

  import stat

  import math

  from pwd import getpwuid

  from grp import getgrgid

  FILE_PERMS = [

  {'r': stat.S_IRUSR, 'w': stat.S_IWUSR, 'x': stat.S_IXUSR},

  {'r': stat.S_IRGRP, 'w': stat.S_IWGRP, 'x': stat.S_IXGRP},

  {'r': stat.S_IROTH, 'w': stat.S_IWOTH, 'x': stat.S_IXOTH}

  ]

  class Info:

  def __init__(self, name, size_width=0):

  self.width = size_width

  statinfo = os.stat(name)

  mode = statinfo.st_mode

  self.name = name

  fmt = "%b %d %H:%M"

  self.date = time.strftime(fmt, time.localtime(statinfo.st_mtime))

  self.size = statinfo.st_size

  allocated_size = statinfo.st_blocks * statinfo.st_blksize

  f_bsize = os.statvfs(name).f_bsize

  f_block_num = math.ceil(allocated_size / f_bsize)

  self.fsize = f_block_num * f_bsize // 1024

  self.user = getpwuid(statinfo.st_uid).pw_name

  self.group = getgrgid(statinfo.st_gid).gr_name

  self.nlink = statinfo.st_nlink

  self.perm = 'd' if stat.S_ISDIR(mode) else '-'

  for perm in FILE_PERMS:

  self.perm += 'r' if mode & perm['r'] else '-'

  self.perm += 'w' if mode & perm['w'] else '-'

  self.perm += 'x' if mode & perm['x'] else '-'

  # magic method: Overrides method in object

  def __str__(self):无锡人流医院 http://www.0510bhyy.com/

  return "{} {} {} {} {:{width}} {} {}".format(

  self.perm, self.nlink, self.user, self.group,

  self.size, self.date, self.name, width=self.width)

  if __name__ == '__main__':

  total = 0

  dir_list = []

  width = 0

  for x in os.listdir('.'):

  if x[0] == '.':

  continue

  item = Info(x)

  width = max(width, len(str(item.size)))

  total += item.fsize

  dir_list.append(x)

  print('total', total)

  for x in sorted(dir_list, key=lambda z: z.upper()):

  print(Info(x, width))


文件 命令 文件夹 目录 功能 大小 模块 程序 输出 相同 下图 之和 人流 信息 内存 医院 原装 含义 字段 常见 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学习软件开发前期交费 山东广启互联网科技有限公司 关系数据库有什么缺点 长沙安卓应用软件开发价格 世界上最强的数据库 数据网络技术就业方向 北京市公安网络安全保卫总队 如何用指令管理好自己的服务器 pyqt5数据库创建 我的世界国际服手机服务器翻译 手动网络安全性怎么选 小米手机实况足球获取服务器失败 宁波互联网智慧工厂软件开发 华润网络安全题库 张店销售采购生产软件开发咨询 高通量测序原始数据的数据库 镇海专业软件开发系统 泰拉瑞亚rpg服务器彩蛋兑换码 软件开发公司找项目 视频接入软件开发 服务器dd脚本 pg数据库怎么存数组 计算机网络技术答案张建忠 物联网软件开发工程师求职信 mysql数据库定时同步 sup数据库 我的世界国际服手机服务器翻译 网络安全模式下进入没问题 支付宝网络安全哪年被攻破过 软件开发里的帮助功能
0