一、遍歷目錄及文件方法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腳本: