python經常使用方法

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

方法1:

import glob 
import os
os.chdir(「./」)
for file in glob.glob(「*.py」):
    print file

方法2:

for file in os.listdir(「./」):
    if file.endswith(「.py」):
        print file    

方法3:

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腳本:

複製代碼
ips = {}
with open("/root/mail_access_log-20180629") as fh: for line in fh: ip = line.split(" ")[0] if 6 < len(ip) <=15: ips[ip] = ips.get(ip, 0) + 1 ip_num = [] for ipaddr,num in ips.items(): ip_num.append((ipaddr,num)) ip_num.sort(key=lambda x: x[1], reverse=True) for ipaddr,num in ip_num[:20]: print('IP地址爲{}, 訪問次數爲{}'.format(ipaddr,num))
複製代碼

 

nginx腳本:

複製代碼
ips = {}
with open("/root/access.log-20180629") as fh: for line in fh: ip = line.split(" ")[0] if 6 < len(ip) <=15: ips[ip] = ips.get(ip, 0) + 1 ip_num = [] for ipaddr,num in ips.items(): ip_num.append((ipaddr,num)) ip_num.sort(key=lambda x: x[1], reverse=True) for ipaddr,num in ip_num[:20]: print('IP地址爲{}, 訪問次數爲{}'.format(ipaddr,num))
複製代碼

 

壓縮和解壓文件

# 壓縮tar.gz

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()
# 解壓tar.gz

import tarfile

tar = tarfile.open("/root/test/test.tar.gz")
#tar.extract("/tmp")                               # 所有解壓到指定路徑
names = tar.getnames()                             # 包內文件名
for name in names:
    tar.extract(name,path="./")                    # 解壓指定文件
tar.close()
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())

輸入參數判斷

try:
    textfile1=sys.argv[1]
    textfile2=sys.argv[2]
except Exception,e:
    print "Error:"+str(e)
    print "Usage: simple3.py filename1 filename2"
    sys.exit()

 

判斷輸入參數是否爲2個

    if len(sys.argv) > 2:
        dir1=sys.argv[1]
        dir2=sys.argv[2]
    else:
        print "Usage: ", sys.argv[0], "datadir backupdir"
        sys.exit()

 

輸入去掉空白

_input = input('please input your opinion: ')
ret = _input.strip()

Python執行linux命令並獲得執行結果

subprocess

#!/usr/bin/env python
# coding: utf-8
 
import subprocess 

def create_process(cmd):
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    result = p.stdout.read()
    code = p.wait()
    return code, result
 
code,result = create_process('ls -l test.py')
 
#print(code)
#print(result)
#根據返回碼判斷是否執行成功
if code:
    print("備份MySQL失敗")
    print(code, result)
else:
    print("備份MySQL成功")
    print(code, result)

利用執行命令後的返回代碼判斷

利用執行命令後的返回代碼判斷
#coding:utf-8

import os
import subprocess

cmd = 'ls -l test.txt'
retcode = subprocess.call(cmd, shell=True)
result = p.returncode
if retcode != 0:
    print("備份MySQL失敗")
    #print(ret)
else:
    print("備份MySQL成功")

 

commands

#!/usr/bin/env python
# coding: utf-8

import sys
import os
import commands

status,output=commands.getstatusoutput('ls -l test.py')

if(status!=0):
    print "command is failed, please check"
    print output
    sys.exit(1)
else:
    print "command is sucess."

os.system

os.system('ls -l /root')

 

ftp客戶端ftplib

from ftplib import FTP ftp = FTP('10.112.13.98') # 鏈接ftp地址 FTP(host,port,timeout) ftp.login(test1,f0W1V7kw) # 使用默認anonymous登陸 login(user,passwd) ftp.cwd('debian') # 切換到目錄debian ftp.retrlines('LIST') # 打印目錄列表 ftp.retrbinary('RETR README', open('README', 'wb').write) # 下載文件寫到本地 ftp.delete('filename') # 刪除ftp中文件 ftp.mkd('dirname') # 在ftp上建立目錄 ftp.size('filename') # 查看文件大小 ftp.quit()

 python按行讀取文件,如何去掉換行符"\n"

 for line in file.readlines():
        line=line.strip('\n')

python 字典、列表、字符串 之間的轉換

一、列表與字符串轉換

列表轉字符串:

將列表中的內容拼接成一個字符串 

                                   

將列表中的值轉成字符串

 

字符串轉列表:

用eval轉換

 

將字符串每一個字符轉成列表中的值

 

將字符串按分割成列表

 

二、列表與字典轉換

列表轉字典:

將兩個列表轉成字典

 

將嵌套列表轉爲字典

 

字典轉列表:

字典中鍵、值轉爲列表

 

三、字典與字符串轉換 

 字符串轉字典:

用eval轉換

 

用json.loads 轉換

 

 字典轉字符串:

 用json.dumps 轉換

 

強轉換

相關文章
相關標籤/搜索