zoukankan      html  css  js  c++  java
  • Python常用方法

    1、遍历目录及文件方法

    1)根据时间遍历指定目录下的文件

    [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为结尾的文件

    方法一:
    [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 过滤出某后缀名文件

    方法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()方法

    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遍历目录下的所有文件和目录

    目录结构如下图:
    
    test---a------d------g--------g.txt
    
    test---a------d------a.txt
    
    test---a------e
    
    --------b
    
    --------c
    
    --------1.txt
    
    --------2.txt
    一、使用os.walk遍历所有的目录和文件
    
    1、获取test目录下的所有文件
    
            for root,dirs,files in os.walk(r"D:	est"):
                for file in files:
                    #获取文件所属目录
                    print(root)
                    #获取文件路径
                    print(os.path.join(root,file))

    2、获取test目录下的所有目录
    
            for root,dirs,files in os.walk(r"D:	est"):
                for dir in dirs:
                    #获取目录的名称
                    print(dir)
                    #获取目录的路径
                    print(os.path.join(root,dir))

    二、利用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:	est"
            #用来存放所有的文件路径
            file_list = []
            #用来存放所有的目录路径
            dir_list = []
            get_file_path(root_path,file_list,dir_list)
            print(file_list)
            print(dir_list)

    转自

    python 过滤出某后缀名文件 - 快乐多巴胺 - 博客园 https://www.cnblogs.com/pscc/p/10122517.html

    python按时间排序目录下的文件 - Mr番茄蛋的博客 - CSDN博客 https://blog.csdn.net/qq_35203425/article/details/80903348

    python遍历目录下的所有文件和目录详细介绍 - 修炼之路 - CSDN博客 https://blog.csdn.net/sinat_29957455/article/details/82778306

    2、时间datetime、time模块

    # 时间格式转换
    time.strftime('%Y-%m-%d %H:%M:%S')
    '2016-11-12 01:20:54'
    
    # 获取昨天日期 
    date = datetime.date.today()
    >>> 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'
    import datetime
    # 获取前100天日期
    (datetime.datetime.now() - datetime.timedelta(days = 100)).strftime("%Y-%m-%d") 
    Out[18]: '2019-12-13'
    
    # 获取昨天日期
    (datetime.datetime.now() - datetime.timedelta(days = 1)).strftime("%Y-%m-%d") 
    Out[19]: '2020-03-21'

    3、多进程

    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

    4、如果文件不存在就创建

    if not os.path.exists('host_info'):
       f = open('host_info', 'w')
       f.close()

    5、压缩文件

    #!/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.storbinary("STOR "+filename, fp, bufsize)         # 上传目标文件 ftp.delete('filename') # 删除ftp中文件 ftp.mkd('dirname') # 在ftp上创建目录 ftp.size('filename') # 查看文件大小 ftp.quit()

    示例

    #!/usr/bin/env python
    # coding: utf-8
    
    import time
    import os
    import ftplib
    from ftplib import FTP
    
    user='username'
    password='password'
    filename = 'u_ex'+ time.strftime('%y%m%d') + '.log'
    
    
    for root,dirs,files in os.walk(r"C:inetpublogsLogFilesW3SVC2"):
        for file in files:
            #获取文件所属目录
            # print(root)
            #获取文件路径
            # print(os.path.join(root,file))
            if filename in os.path.join(root,file):
                print(os.path.join(root,file))
                local_file = os.path.join(root,file)
                # print(type(local_file))
    
    bufsize = 1024
    fp = open(local_file, 'rb')
    
    
    ftp = FTP('IP')     # 连接ftp地址   FTP(host,port,timeout)
    ftp.login(user, password)                     # 使用默认anonymous登录  login(user,passwd)
    ftp.cwd('debian')               # 切换到目录debian
    ftp.storbinary("STOR "+filename, fp, bufsize)         # 上传目标文件
    ftp.retrlines('LIST')           # 打印目录列表
    ftp.quit()
    fp.close()
    print('upload file success.')

    python按行读取文件,如何去掉换行符" "

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

    python 字典、列表、字符串 之间的转换

    1、列表与字符串转换

    列表转字符串:

    将列表中的内容拼接成一个字符串 

                                       

    将列表中的值转成字符串

    字符串转列表:

    用eval转换

    将字符串每个字符转成列表中的值

    将字符串按分割成列表

    2、列表与字典转换

    列表转字典:

    将两个列表转成字典

    将嵌套列表转为字典

    字典转列表:

    字典中键、值转为列表

    3、字典与字符串转换 

     字符串转字典:

    用eval转换

    用json.loads 转换

     字典转字符串:

     用json.dumps 转换

    强转换

    列表转换成字典

    def GenPassword_reg(length=16, chars=string.ascii_letters + string.digits):
        return ''.join([choice(chars) for i in range(length)])
    
    dic = {}
    # result 是个列表
    for i in result:
        dic[i] = GenPassword_reg()
    print(dic)

    shell与python间传递变量方法

    python -> shell:
    1.环境变量
    import os
    var=123或var=’123’
    os.environ[’var’]=str(var)  #environ的键值必须是字符串
    os.system(’echo $var’)
    
    2.字符串连接
    
    import os
    path=’/root/a.txt’
    var=[1]
    var=’bash’
    os.system(’echo ’ + path)                  #注意echo后有空格
    os.system(‘echo ‘ + str(var[0]))
    os.system(’echo ’ + var + ’ /root/c.sh’) #注意echo后和/root前有空格 
    
    
    3.通过管道
    import os
    var=’123’
    os.popen(’wc -c’, ’w’).write(var)
    
    
    4.通过文件
    output = open(‘/tmp/mytxt’, ‘w’)
    output.write(S)      #把字符串S写入文件
    output.writelines(L) #将列表L中所有的行字符串写到文件中
    output.close()
    
    
    5.通过重定向标准备输出
    
    buf = open(’/root/a.txt’, ’w’)
    print >> buf, ‘123
    ’, ‘abc’
    
    或
    print >> open(‘/root/a.txt’, ‘w’), ‘123
    ’, ‘abc’ #写入或生成文件
    print >> open(‘/root/a.txt’, ‘a’), ‘123
    ’, ‘abc’ #追加
    shell -> python:

    1.管道
    import os
    var=os.popen(’echo -n 123’).read( )
    print var
    
    2.
    import commands
    var=commands.getoutput(’echo abc’)       #输出结果
    var=commands.getstatusoutput(’echo abc’) #退出状态和输出结果
    
    
    3.文件
    input = open(‘/tmp/mytxt’, ‘r’)
    S = input.read( )      #把整个文件读到一个字符串中
    S = input.readline( )  #读下一行(越过行结束标志)
    L = input.readlines( ) #读取整个文件到一个行字符串的列表中

    转自:原文链接:https://blog.csdn.net/kpshare/article/details/7523511

    python用变量拼接成 shell命令执行

    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

    mysql_trunc = '/usr/local/mysql/bin/mysql -uroot -p -h localhost -N -e "select * from moffice_hnair_schedule_log_his.' + str(final_list[-1]) + ' limit 1"' print(mysql_trunc) code, result = create_process(mysql_trunc) if code != 0: print("执行MySQL清除log_interface_result失败") print(result) else: print("执行MySQL清除log_interface_result成功") print(result)

    在windows下删除文件报错

     

     WindowsError: [Error 123] : 'C:\Users\chh-huang\Desktop est\2019-11-23.txt'

    filename = r'C:Userschh-huangDesktop	est\' + name

    需要在路径前加r,这样就没问题了

    filename = r'C:Userschh-huangDesktop	est' + os.sep + name
    等于
    filename = r'C:Userschh-huangDesktop	est\' + name

    其中,os.sep根据你所处的平台,自动采用相应的分隔符号
    >>> os.sep
    '/'

    Python删除过期文件

    # -*- coding:utf8 -*-
    #!/usr/bin/python
    import os
    import datetime
    import time
    import shutil
    
    for root, dirs, files in os.walk(r'C:Userschh-huangDesktop	est'):
        for name in files:
            (y1, m1, d1) = (int(x) for x in name.split('.')[0].split('-'))
            # print(y1, m1, d1)
            date1 = datetime.date(y1, m1, d1)
            datenow = time.strftime('%Y%m%d')
            y2 = int(datenow[:4])
            m2 = int(datenow[4:6])
            d2 = int(datenow[6:])
            date2 = datetime.date(y2, m2, d2)
            # print(date1, date2)
    # 删除大于等于2天的文件
    if (date2 - date1).days >= 2: print 'Expired file! Deleting file... ', name print('os.remove(%s) ' % name) # filename = r'C:Userschh-huangDesktop est\' + name filename = r'C:Userschh-huangDesktop est' + os.sep + name os.remove(filename)

    函数执行的结果赋值给某个变量(使用return)

    files = ['log_interface_view_20194', 'log_interface_view_201905','log_interface_view_201915']
    
    def sort_strings(files):
        sort_dict = {}
        for file in files:
            sort_num = int(file[19:])
            sort_dict[file] = sort_num
        sorted_dict = sorted(sort_dict.items(), key=lambda x:x[1])
        print([key[0] for key in sorted_dict])[0]
    
    # 那如果我让把函数执行的结果赋值给某个变量
    var = sort_strings(files)
    print(var)
    
    执行结果,变量没有赋值成功
    [root@hch test 16:03:24]# python dbsort.py 
    log_interface_view_20194
    None
    
    这是就需要使用return了
    
    def sort_strings(files):
        sort_dict = {}
        for file in files:
            sort_num = int(file[19:])
            sort_dict[file] = sort_num
        sorted_dict = sorted(sort_dict.items(), key=lambda x:x[1])
    #    print([key[0] for key in sorted_dict])[0]
        return ([key[0] for key in sorted_dict])[0]
    
    var = sort_strings(files)
    print(var)
    
    执行
    [root@hch test 16:05:56]# python dbsort.py 
    log_interface_view_20194

    将列表split分成 prefix, suffix

    _input = ['ip_10.2.223.5', 'ip_10.2.220.3', 'port_22', 'port_8001', 'port_80', 'ip_172.16.8.35']
    '''如果ip开头:不变
    port开头:把下划线去掉
    列表推导式:第二种形态去完成'''
    
    答案:
    for item in _input:
         if item.startswith('ip'):
              _list.append(item)
         elif item.startswith('port'):
              prefix, suffix = item.split('_')
              item = prefix + suffix
              _list.append(item)
    print(_list)
    
    列表推导式
    [item.replace('_','') if item.startswith('port') else item for item in _input ]

    pymysql使用方法

    #!/usr/bin/env python
    #coding:utf-8
    
    import pymysql
    #连接数据库
    db = pymysql.connect(host = 'localhost', user = 'root', password = 'password', db = 'demo1', port = 3306)
    print(db)
    cur = db.cursor()
    sql = "select * from login where id = {}".format(1)
    print(sql)
    try :
        #查询
        cur.execute(sql)
        #查询所有数据
        results = cur.fetchall()
        #获取单条数据
        # results = cur.fetchone()
        for i  in results :
            id = i[0]
            username = i[1]
            passwrod = i[2]
            print('id:{},username:{},password:{}'.format(id, username, passwrod))
     
        #添加数据
        sql_insert = "insert into login(username,password) values ({},{})".format('"xiaowamg33"',666)
        print('sql_insrt:{}'.format(sql_insert))
        id  = cur.execute(sql_insert)
        print('id:{}'.format(id))
        db.commit()
     
        #修改
        sql_update = 'update login set username = {} where id = {}'.format('"dagege"',1)
        id_update = cur.execute(sql_update)
        print('修改的行数:{}'.format(id_update))
        db.commit()
     
        #删除
        sql_delete = 'delete from login where id={}'.format(2)
        id_dedete = cur.execute(sql_delete)
        print('删除的行数:{}'.format(id_dedete))
        db.commit()
    except Exception as e:
        print(e)
        db.rollback()
    finally:
        db.close()

    转自

    pymysql的使用简单使用方法 - a599174211的博客 https://blog.csdn.net/a599174211/article/details/82702219

    参考

    关于安装pymysql - sike8 - 博客园 https://www.cnblogs.com/sike8/p/11059878.html

    Python脚本:自动备份并压缩文件,同时删除过期文件

    参考链接如下

    (1条消息)python在windows中备份文件并压缩的解决办法 - qq_23664975的博客 - CSDN博客 https://blog.csdn.net/qq_23664975/article/details/77718843

    (1条消息)(windows)python脚本:自动备份并压缩文件,同时删除过期文件 - 点点滴滴 - CSDN博客 https://blog.csdn.net/cogent2001/article/details/1953031

    (1条消息)python压缩日志并删除原文件 - 独孤仁的专栏 - CSDN博客 https://blog.csdn.net/kong2030/article/details/84993544
     

    文件的读、写

    #!/usr/bin/env python
    #coding:utf-8
    
    # 读取文件
    f = open(r'2', 'r')
    content = f.readlines()
    f.close()
    print(content)
    
    # 写入文件多行数据
    with open('/etc/yum.repos.d/redhat7_nanshu.repo', 'w') as f:  # 采用with语法结构可以让程序自动关闭打开的文件,不用自己处理
        f.writelines(['[base]
    ', 'name=CentOS-7 - Base
    '])
    
    # 读取打印多行文件
    with open('text.txt') as rows:
        for row in rows:
            print(row, end='')

    文件的移动和复制

    #!/usr/bin/env python
    #coding:utf-8
    
    src_dir = '/etc/yum.repos.d'
    dst_dir = '/tmp/yum-bak'
    
    if not os.path.exists(dst_dir):
      os.makedirs(dst_dir)
    
    if os.path.exists(dst_dir):  
        for root,dirs,files in os.walk(src_dir):
            for file in files:
                #获取文件所属目录
                print(root)
                #获取文件路径
                print(os.path.join(root,file))
                # 文件完整路径
                src_file = os.path.join(root, file)
                # 复制文件
                shutil.copy(src_file, dst_dir)
                # 移动文件
                shutil.move(src_file, dst_dir)
                # 移动文件并重命名
                dst_file = os.path.join(dst_dir, file + time.strftime('%Y-%m-%d %H:%M:%S'))
                shutil.move(src_file, dst_file)
    
    code,result = create_process("cat /etc/redhat-release|awk '{print $1}'")

    判断文件是否存在

    if not os.path.exists(dst_dir):
      os.makedirs(dst_dir)
    
    if os.path.exists(dst_dir):  

     端口telnet

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

    import telnetlib
    # 判断端口是否通 def port_scan(ip): try: telnetlib.Telnet(host=ip, port=80, timeout=2) print(ip, 80, 'is avaliable') except Exception, e: print(ip, 80, 'is not avaliable') raise e exit() else: pass port_scan('www.baidu.com')

    多线程

     

    # coding:utf8
    
    import time 
    from concurrent.futures import ThreadPoolExecutor
    
    TEST_COUNT = 100
    THREADS_SUM = 50
    thread_pool = ThreadPoolExecutor(THREADS_SUM)
    
    
    def test():
        time.sleep(1)
        print('run test')
    
    
    def runfunc(count):
        for i in range(count):
            thread_pool.submit(testi)
    
    runfunc(TEST_COUNT)

    windows输出中文乱码

    def paint():
        # os.system('cls')    
        print("=================================================")
        print("|  The Points Menu:                             |")
        print("=================================================")
        print("|        1.  gateway上传变更包                   |").decode("utf-8").encode("gbk") 
    print("| 2. shopping上传变更包 |").decode("utf-8").encode("gbk") print("| 0. 退出 |").decode("utf-8").encode("gbk") print("================================================")

    .decode("utf-8").encode("gbk")来解决。

    Python启动windows服务或程序

    启动服务

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import  os
    try:
        os.system('NET STOP MSSQLSERVER')
    except OSError:
        print "system error"
        os.system('NET START MSSQLSERVER')

    启动程序

    import os
    def open_app(app_dir):
        os.startfile(app_dir) #os.startfile()打开外部应该程序,与windows双击相同
    if __name__ == "__main__":
        app_dir = r'G:yeshenNoxinNox.exe'#指定应用程序目录
        open_app(app_dir)

    用enumerate对现有列表每项进行修改

     对现有列表img_list,每项中添加新的字符串,不用新建列表,用enumerate就可以做到

    for i,v in enumerate(img_list):
        img_list[i] = "http://www.xueshengmai.com" + v
    print(img_list)

    Python爬虫

    实例1:爬取豆瓣图书名

    # coding: utf-8
    import requests
    import re
    
    # 制作headers 
    head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
    page_obj = requests.get("https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4", headers = head)
    page = page_obj.text
    # print(page)
    regex = '<a href="https://book.douban.com/subject/d+/" title="(.+?)"'
    data = re.findall(regex, page)
    for i in data:
        print(i.encode('gbk'))
    print(data)

    实例2:爬取校花网站图片

    #!/usr/bin/env python
    # coding: utf-8
    
    import requests
    import re
    from urllib import request
    
    page = requests.get("http://www.xueshengmai.com/hua/")
    content = page.text
    # print(content)
    # 正则表达式
    regex = '<img width="210"  alt=".+?" src="(.+?)" />'
    img_list = re.findall(regex, content)
    print(img_list)
    
    # 拼接图片地址
    for i,v in enumerate(img_list):
        img_list[i] = "http://www.xueshengmai.com" + v
    print(img_list)
    
    # 下载图片
    count = 0
    for i in img_list:
        # i为下载地址 后面为保存的名字
        request.urlretrieve(i, "美女%s.jpg" % count)
        print("第%s图片下载完成" % (count + 1))
        count += 1

    with open写入Excel CSV文件

    将数据写入guazi.csv文件

    with open(r'guazi.csv', 'w') as f:
        for li in title_url:
            name = li.xpath('.//h2/text()').extract()
            year = li.xpath('.//div/text()').extract()
            price = li.xpath('.//div/p/text()').extract()
            price_real = li.xpath('.//em/text()').extract()
            img = li.xpath('.//img/@src').extract()
            print('车型:{},  车况:{},{},  价格:{},  原价:{},  图片:{}'.format(name[0], year[0], year[1], price[0], price_real[0], img[0]))
            f.write('{},{},{},{},{}
    '.format(name[0], year[0], year[1], price[0], price_real[0]))

    保存为中文csv文件

    # 保存到CSV文件中, 保存为中文编码选择gb1803
    with open(name+'.csv', 'w', encoding='gb18030') as f:
        f.write('职位名,公司名,薪资,工作地点,职位连接,公司链接,发布日期
    ')

    Tomcat配置文件注释

    #!/usr/bin/env python
    # coding: utf-8
    # Tomcat配置文件注释
    
    import os
    import re
    
    with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
        for line in fr:        
            regx = re.compile(r'<Connector.*?protocol="AJP/1.3" redirectPort="8443" />')     # 匹配替换的内容
            ret = ''.join(re.findall(regx, line))                                                # 列表转成成字符串
            if ret:
                print('匹配成功,{}'.format(ret))
                ret1 = ''.join(ret.replace('<Connector', '<-- <Connector'))
                line = ''.join(ret1.replace('>', '> -->'))
                print('替换后,{}'.format(line))
            fw.write(line)

    执行效果

    Python对文件修改,替换,删除

    一、Python使用replace修改原文件内容方式:

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    
    
    old_str = "aaa" #老文件内容字段
    new_str = "bbb" #要改成字段
    file_data = ''
    with open('/opt/1.txt', 'r', encoding='utf-8') as f:
        for line in f:
            if old_str in line:
                line = line.replace(old_str, new_str)
                file_data += line
    with open('/opt/1.txt', 'w',encoding='utf-8') as f:
        f.write(file_data)

    二、python 使用正则表达式 替换文件内容 re.sub 方法替换

    import re,os
    def alter(file,old_str,new_str):
    
        with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
            for line in f1:
                f2.write(re.sub(old_str,new_str,line))
        os.remove(file)
        os.rename("%s.bak" % file, file)
    alter("file1", "admin", "password"

     对文件所有行前添加‘#’注释

    #!/usr/bin/env python
    # coding: utf-8
    
    import os
    import re
    
    with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
        for line in fr:
            after = '#' + line
            fw.write(after)

     对文件进行注释#,空行不注释

    #!/usr/bin/env python
    # coding: utf-8
    
    import os
    import re
    
    with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
        for line in fr:
            if not line.strip() or line.startswith('#'):          #判断是否是空行或注释行
                fw.write(line)
            else:
                after = '#' + line
                print(after)
                fw.write(after)

    Python发送邮件

    纯文本邮件

    import smtplib
    from email.mime.text import MIMEText
     
     
    def send_text_only():
        # 1.发件人、授权码,收件人信息
        from_addr = "9071xxxxx@qq.com"
        pwd = "aqinixxxxxxxxxxx"
        to_addr = "sunxxxxx@efee.com.cn"  # 发送给多个,直接["邮箱1","邮箱2","邮箱3"]
     
        # 2.发送内容
        msg = MIMEText("hello, I am suner!!")
        msg["Subject"] = "测试报告"
        msg["From"] = from_addr
        msg["To"] = to_addr
     
        # 3.连接smtp服务器,登录服务器并发送文本
        smtp_server = "smtp.qq.com"
        server = smtplib.SMTP(smtp_server, 25)
        server.login(from_addr, pwd)
        server.sendmail(from_addr, to_addr, msg.as_string())  # as_string()把MIMEText变成一个str
        server.close()
     
     
    if __name__ == '__main__':
        send_text_only()

    多个附件

    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
     
     
    def send_enclosure():
        # 1.发件人、授权码,收件人信息
        from_addr = "907xxxxx@qq.com"
        pwd = "aqinirkcqyxubdbf"
        to_addr = "sunyingying@efee.com.cn"
     
        # 2.创建实例对象,设置主题等信息
        msg = MIMEMultipart()
        msg["Subject"] = "收到一个文档文件和图片文件"
        msg["From"] = from_addr
        msg["To"] = to_addr
     
        # 邮件内容(按每个部分)
        part1 = MIMEText("这是一个word文件和图片")
        msg.attach(part1)
     
        # 添加图片附件
        part2 = MIMEApplication(open("meimei.jpg", "rb").read())
        part2.add_header("Content-Disposition", "attachment", filename="meimei.jpg")
        msg.attach(part2)
     
        # 添加word附件
        part3 = MIMEApplication(open("1.docx","rb").read())
        part3.add_header("Content-Disposition", "attachment", filename="1.docx")
        msg.attach(part3)
     
     
        # 3.连接smtp服务器,登录服务器并发送文本
        smtp_server = "smtp.qq.com"
        server = smtplib.SMTP(smtp_server,25)
        server.login(from_addr,pwd)
        server.sendmail(from_addr,to_addr,msg.as_string()) # as_string()把MIMEText变成一个str
        server.close()
     
    if __name__ == '__main__':
        send_enclosure()

    参考

    (3条消息)Python基础-46-邮件发送(带附件)_Python_karry_孙二的博客-CSDN博客
    https://blog.csdn.net/qq_39620483/article/details/90903782

    Python输入参数执行脚本

    l = len(sys.argv)
    if l == 1:
        s = """
        请输入参数
        参数说明:
        up_his 更新历史记录表
        up_hot 更新实时热搜
        up_det 更新详细表
        """
        print(s)
    else:
        order = sys.argv[1]
        if order == "up_his":
            update_history()
        elif order == "up_det":
            update_details()
        elif order == "up_hot":
            get_baidu_hot()
            update_hot_search()

    # 执行
    python test.py up_his

  • 相关阅读:
    解决chrome浏览器自动填充密码
    linux top命令详解
    经纬度互换、换算成米、两点的经纬度计算两点间的距离
    js 调用声音提示
    centos7 kdump.service启动失败的解决方法
    Postman 工具模拟Ajax请求
    CentOs7 安装最新版的Git
    Nginx日志切割之Logrotate篇
    mysql让主键id重新排序
    阿里云大文件解压函数计算
  • 原文地址:https://www.cnblogs.com/paul8339/p/11081189.html
Copyright © 2011-2022 走看看