[python][LXF][homework]操作文件和目录

reference website:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431925324119bac1bc7979664b4fa9843c0e5fcdcf1e000#0

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

 1 from datetime import datetime
 2 import os
 3 
 4 pwd = os.path.abspath('.')
 5 
 6 print('Size    Last Modified    Name')
 7 print('------------------------------------------------------------')
 8 
 9 for f in os.listdir(pwd):
10     fsize = os.path.getsize(f)
11     mtime = datetime.fromtimestamp(os.path.getmtime(f)).strftime('%Y-%m-%d %H:%M')
12     flag = '/' if os.path.isdir(f) else ''
13     print('%10d  %s  %s%s'% (fsize, mtime, f, flag))

2. 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。

写了两种方案,第一种用os.walk(path),下标写的很不正规。打印出来的是绝对路径。

第二种方案是遍历。用relpath打印相对路径。

os.path.realpath(path)  #返回path的真实路径
os.path.relpath(path, start)  #从start开始计算相对路
os.path.walk(path, visit, arg)  #遍历path,进入每个目录都调用visit函数,visit函数必须有
3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有
文件名,args则为walk的第三个参数
os.path.split(path)  #把路径分割成dirname和basename,返回一个元组
os.path.join(path1, path2)  #把目录和文件名合成一个路径
 1 def print_path_1(path,file_name):
 2     for i in os.walk(path):
 3         l = len(i[2])
 4         for k in range(l):
 5             if file_name in i[2][k]:
 6                 print(i[0],i[2][k])
 7 
 8 def print_path_2(path,file_name):
 9     for i in os.listdir(path):
10         context= os.path.join(path,i)
11         if os.path.isfile(context) and (file_name in i):
12             print(path,i)
13             realpath = os.path.relpath(path,current_path)
14             print(realpath)
15         elif os.path.isdir(context):
16             print_path_2(context,file_name)
17 
18 if __name__=='__main__':
19     current_path = os.getcwd()
20     a = [current_path, 'test']
21     print_path_1(*a)
22     print('----------------------------------')
23     print_path_2(*a)

 

posted @ 2017-10-10 18:08  小小西红柿  阅读(405)  评论(0编辑  收藏  举报