作业三: 实现“ls -l”的基本功能,至少能输出文件类型、9个权限位信息、文件大小
时间: 2024-01-24 12:04:11 浏览: 78
用c函数实现ls -l功能
好的,我可以帮你实现 "ls -l" 的基本功能。你可以使用 Python 的 os 和 stat 模块来获取文件信息,然后格式化输出。
以下是实现代码:
```python
import os
import stat
import datetime
# 获取文件类型
def get_file_type(mode):
if stat.S_ISDIR(mode):
return "d"
elif stat.S_ISCHR(mode):
return "c"
elif stat.S_ISBLK(mode):
return "b"
elif stat.S_ISREG(mode):
return "-"
elif stat.S_ISFIFO(mode):
return "p"
elif stat.S_ISLNK(mode):
return "l"
elif stat.S_ISSOCK(mode):
return "s"
else:
return "-"
# 获取权限位信息
def get_permission(mode):
perm = ""
perm += "r" if mode & stat.S_IRUSR else "-"
perm += "w" if mode & stat.S_IWUSR else "-"
perm += "x" if mode & stat.S_IXUSR else "-"
perm += "r" if mode & stat.S_IRGRP else "-"
perm += "w" if mode & stat.S_IWGRP else "-"
perm += "x" if mode & stat.S_IXGRP else "-"
perm += "r" if mode & stat.S_IROTH else "-"
perm += "w" if mode & stat.S_IWOTH else "-"
perm += "x" if mode & stat.S_IXOTH else "-"
return perm
# 获取文件大小
def get_size(size):
units = ['B', 'KB', 'MB', 'GB', 'TB']
index = 0
while size > 1024:
size /= 1024
index += 1
return "{:.1f}{}".format(size, units[index])
# 格式化输出
def format_output(file):
st = os.stat(file)
file_type = get_file_type(st.st_mode)
permission = get_permission(st.st_mode)
size = get_size(st.st_size)
mtime = datetime.datetime.fromtimestamp(st.st_mtime).strftime('%Y-%m-%d %H:%M')
print("{}{} {} {} {} {}".format(file_type, permission, st.st_nlink, st.st_uid, st.st_gid, size, mtime, os.path.basename(file)))
# 主函数
def main():
files = os.listdir('.')
for file in files:
if not file.startswith('.'):
format_output(file)
if __name__ == '__main__':
main()
```
这个程序会输出当前目录下除了以 "." 开头的所有文件的文件类型、9个权限位信息、文件大小和文件名,类似于 "ls -l" 命令的输出。
阅读全文