import os, time, sys
from pprint import pprint
class ls:
#输出格式设定
def __init__(self, path='.'):
self.path = path
def output(self):
localtime = time.localtime()
Time = '/'.join([str(x) for x in localtime[0:3]])
if os.name == 'nt':
print('-' * 30)
print("{: ^30}".format("OS:Windows"))
print('-' * 30)
print("{: <{}}{: >}".format('Time',30-len(Time), Time))
#实现ls-l
#获取文件夹下文件个数,只取一层
def numOfFile(self, path, num=1):
try:
if os.path.isdir(path):
for x in os.listdir(path):
num += 1
except BaseException:
pass
finally:
return num
#二进制码转换为权限码
def num2chmod(self, numstr):
chmod = ['r', 'w', 'x']
words = ''
for i, x in enumerate(numstr):
if x == '1':
words += (lambda i, chmod : chmod[i % 3])(i, chmod)
else:
words += '-'
return words
def listdir(self):
self.output()
print ('权限\t 文件数\t 用户ID\t 群组Id\t 文件修改日期\t 大小\t 文件名')
for x in os.listdir(self.path):
dir = os.path.join(self.path, x)
# 显示 dir路径文件的信息
stat = os.stat(dir)
# 输出INode保护模式的信息
print(self.num2chmod(str((bin(stat.st_mode)[-9:]))), end='\t')
# 输出该路径下的文件数量
print(self.numOfFile(dir), end='\t\t')
# 输出该用户Id与群组ID
print(stat.st_uid, end='\t'*2)
print(stat.st_gid, end='\t'*2)
# 输出每个文件的修改时间;
print('/'.join(str(x) for x in time.localtime(stat.st_mtime)[0:3]), end='\t ')
print(stat.st_size, end='\t'*2)
print(x)
def __call__(self, *args, **kwargs):
self.listdir()
if __name__ == "__main__":
ls(sys.argv[1])()
第二题
import os, pprint
import functools
def isdir(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
path = args[0]
if not os.path.isdir(path):
print("输入路径有误")
raise ValueError("路径有误")
return func(*args, **kwargs)
return wrapper
@isdir
def checkfile(path, key):
absanw = []
anw = []
for x in os.listdir(path):
if key in x:
anw.append(x)
absanw.append(os.path.abspath(x))
dir = os.path.join('./', x)
try:
if os.path.isdir(dir):
for y in os.listdir(dir):
if key in y:
anw.append(y)
absanw.append(os.path.abspath(y))
except:
pass
return anw, absanw
if __name__ == '__main__':
while True:
key = input("输入路径关键字:\n")
P = input("输入所要查找目录位置:\n")
path, abspath = checkfile(P, key)
print('当前目录的相对路径:\n')
pprint.pprint(path)
print('当前目录的绝对路径:\n')
pprint.pprint(abspath)
泛色海岸
第一题
第二题