一、遍历目录及文件方法html
1)根据时间遍历指定目录下的文件python
[root@04 b2c]# cat file_list.py #!/usr/bin/env python # coding: utf-8 import os def get_file_list(file_path): dir_list = os.listdir(file_path) if not dir_list: return else: # 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列 # os.path.getmtime() 函数是获取文件最后修改时间 # os.path.getctime() 函数是获取文件最后建立时间 dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x))) # print(dir_list) return dir_list print get_file_list('/logarchive/b2c')
执行 [root@04 b2c]# python file_list.py ['2019-05-29.log', '2019-05-30.log', 'b2c_input.py', '2019-05-31.log', '2019-06-01.log', '2019-06-02.log', '2019-06-03.log', '2019-06-04.log', '2019-06-05.log', '2019-06-06.log', '2019-06-07.log', '2019-06-08.log', '2019-06-09.log', '2019-06-10.log', '2019-06-11.log', '2019-06-12.log', '2019-06-13.log', '2019-06-14.log', '2019-06-15.log', '2019-06-16.log', '2019-06-17.log', '2019-06-18.log', '2019-06-19.log', '2019-06-20.log', '2019-06-21.log', '2019-06-22.log', '2019-06-23.log', '2019-06-24.log', 'file.py', 'file_list.py']
2)若是过滤以log为结尾的文件linux
方法一: [root@04 b2c]# cat file_list.py #!/usr/bin/env python # coding: utf-8 import os def get_file_list(file_path): dir_list = os.listdir(file_path) if not dir_list: return else: # 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列 # os.path.getmtime() 函数是获取文件最后修改时间 # os.path.getctime() 函数是获取文件最后建立时间 dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x))) for filename in dir_list: if filename.endswith(".log"): print filename get_file_list('/logarchive/b2c') [root@app04 b2c]# python file_list.py 2019-05-29.log 2019-05-30.log 2019-05-31.log 2019-06-01.log 2019-06-02.log 2019-06-03.log 2019-06-04.log 2019-06-05.log 2019-06-06.log 2019-06-07.log 2019-06-08.log 2019-06-09.log 2019-06-10.log 2019-06-11.log 2019-06-12.log 2019-06-13.log 2019-06-14.log 2019-06-15.log 2019-06-16.log 2019-06-17.log 2019-06-18.log 2019-06-19.log 2019-06-20.log 2019-06-21.log 2019-06-22.log 2019-06-23.log 2019-06-24.log 方法二: #!/usr/bin/env python # coding: utf-8 import os, glob, time # 定义要清理文件的目录 root = '/logarchive/b2c' _list = [] for folder in glob.glob(root): for _log_name in glob.glob(folder + '/*.log'): _list.append(_log_name) filelist = sorted(_list) for log_name in filelist: print log_name f = open(log_name, 'r') content = f.readlines() f.close() _time = [] for item in content: time = int(item.strip().split('>>>')[-1].split('ms')[0]) _time.append(time) access_time = sorted(_time) print("b2c 运价访问时间:") print("min: %s ms"% access_time[0]) print("max: %s ms"% access_time[-1]) sum = 0 access_count = len(_time) for i in _time: sum += i avg = sum/access_count print("avg: %s ms" % avg) print '-'*50 print filelist
3)网上收集的其余方法,python 过滤出某后缀名文件nginx
import glob import os os.chdir(“./”) for file in glob.glob(“*.py”): print file
for file in os.listdir(“./”): if file.endswith(“.py”): print file
for root, dirs, files in os.walk(“./”): for file in files: if file.endswith(“.py”): print os.path.join(root, file)
4) os.walk()方法shell
import os def all_path(dirname): result = []#全部的文件 for maindir, subdir, file_name_list in os.walk(dirname): print("1:",maindir) #当前主目录 print("2:",subdir) #当前主目录下的全部目录 print("3:",file_name_list) #当前主目录下的全部文件 for filename in file_name_list: apath = os.path.join(maindir, filename)#合并成一个完整路径 result.append(apath) return result print(all_path("E:\myTest"))
5) python遍历目录下的全部文件和目录apache
目录结构以下图: test---a------d------g--------g.txt test---a------d------a.txt test---a------e --------b --------c --------1.txt --------2.txt
1、使用os.walk遍历全部的目录和文件 1、获取test目录下的全部文件 for root,dirs,files in os.walk(r"D:\test"): for file in files: #获取文件所属目录 print(root) #获取文件路径 print(os.path.join(root,file))
2、获取test目录下的全部目录 for root,dirs,files in os.walk(r"D:\test"): for dir in dirs: #获取目录的名称 print(dir) #获取目录的路径 print(os.path.join(root,dir))
2、利用os.listdir递归获取全部的目录路径和文件路径 def get_file_path(root_path,file_list,dir_list): #获取该目录下全部的文件名称和目录名称 dir_or_files = os.listdir(root_path) for dir_file in dir_or_files: #获取目录或者文件的路径 dir_file_path = os.path.join(root_path,dir_file) #判断该路径为文件仍是路径 if os.path.isdir(dir_file_path): dir_list.append(dir_file_path) #递归获取全部文件和目录的路径 get_file_path(dir_file_path,file_list,dir_list) else: file_list.append(dir_file_path) if __name__ == "__main__": #根目录路径 root_path = r"D:\test" #用来存放全部的文件路径 file_list = [] #用来存放全部的目录路径 dir_list = [] get_file_path(root_path,file_list,dir_list) print(file_list) print(dir_list)
转自json
python 过滤出某后缀名文件 - 快乐多巴胺 - 博客园 https://www.cnblogs.com/pscc/p/10122517.html数组
python按时间排序目录下的文件 - Mr番茄蛋的博客 - CSDN博客 https://blog.csdn.net/qq_35203425/article/details/80903348app
python遍历目录下的全部文件和目录详细介绍 - 修炼之路 - CSDN博客 https://blog.csdn.net/sinat_29957455/article/details/82778306async
二、时间datetime、time模块
# 时间格式转换 time.strftime('%Y-%m-%d %H:%M:%S') '2016-11-12 01:20:54' # 获取昨天日期 >>> date.today() - timedelta(days=1) datetime.date(2016, 11, 11) >>> date.isoformat(date.today() - timedelta(days=1)) '2016-11-11' # 获取明天日期 >>> date.today() + timedelta(days=1) datetime.date(2016, 11, 13) >>> date.isoformat(date.today() + timedelta(days=1)) '2016-11-13'
三、多进程
from multiprocessing import Pool, current_process import urllib2 urls = [ 'http://www.baidu.com', 'http://www.jd1.com', 'http://www.sina.com', 'http://www.163.com', ] def status_code(url): print( 'process name:', current_process().name) try: req = urllib2.urlopen(url, timeout=2) return req.getcode() except urllib2.URLError: return p = Pool(processes=4) for url in urls: r = p.apply_async(status_code, args=(url,)) #print r.get() #if r.get(timeout=1) == 200: if r.get() == 200: print("%s OK" %url) else: print("%s NO" %url)
转自 博客地址:http://lizhenliang.blog.51cto.com and https://yq.aliyun.com/u/lizhenliang
四、若是文件不存在就建立
if not os.path.exists('host_info'): f = open('host_info', 'w') f.close()
五、压缩文件
#!/usr/bin/env python # -*- coding: UTF-8 -*- import os import tarfile tar = tarfile.open("/root/test/test.tar.gz","w:gz") # 建立压缩包名 for path,dir,files in os.walk("/root/test"): # 递归文件目录 for file in files: fullpath = os.path.join(path,file) tar.add(fullpath) # 建立压缩包 tar.close()
3种压缩方法
gzip [解压缩gzip 删除原文件] #压缩gzip import gzip f_in = open('file.log', 'rb') f_out = gzip.open('file.log.gz', 'wb') f_out.writelines(f_in) f_out.close() f_in.close() #压缩gzip File = 'xuesong_18.log' g = gzip.GzipFile(filename="", mode='wb', compresslevel=9, fileobj=open((r'%s.gz' %File),'wb')) g.write(open(r'%s' %File).read()) g.close() #解压gzip g = gzip.GzipFile(mode='rb', fileobj=open((r'xuesong_18.log.gz'),'rb')) open((r'xuesong_18.log'),'wb').write(g.read()) tarfile [归档压缩tar.gz 保留原文件] # 压缩tar.gz import os import tarfile tar = tarfile.open("/tmp/tartest.tar.gz","w:gz") # 建立压缩包名 for path,dir,files in os.walk("/tmp/tartest"): # 递归文件目录 for file in files: fullpath = os.path.join(path,file) tar.add(fullpath) # 建立压缩包 tar.close() # 解压tar.gz import tarfile tar = tarfile.open("/tmp/tartest.tar.gz") #tar.extract("/tmp") # 所有解压到指定路径 names = tar.getnames() # 包内文件名 for name in names: tar.extract(name,path="./") # 解压指定文件 tar.close() zipfile [解压缩zip 最大2G] # 压缩zip import zipfile,os f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED) # ZIP_STORE 为默认表不压缩. ZIP_DEFLATED 表压缩 #f.write('file1.txt') # 将文件写入压缩包 for path,dir,files in os.walk("tartest"): # 递归压缩目录 for file in files: f.write(os.path.join(path,file)) # 将文件逐个写入压缩包 f.close() # 解压zip if zipfile.is_zipfile('filename.zip'): # 判断一个文件是否是zip文件 f = zipfile.ZipFile('filename.zip') for file in f.namelist(): # 返回文件列表 f.extract(file, r'/tmp/') # 解压指定文件 #f.extractall() # 解压所有
python统计apache、nginx访问日志IP访问次数
前言:python统计apache、nginx访问日志IP访问次数而且排序(显示前20条)。其实用awk+sort等命令能够实现,用awk数组也能够实现,这里只是用python尝试下。
apache脚本:
nginx脚本: