zoukankan      html  css  js  c++  java
  • Python练习1

    一、linux,基于文件大小,创建时间,修改时间,文件内容,文件名称等进行查找汇总和输出

    2019-01-04

    只操作文本文件

    #!/usr/bin/env python
    # -*- coding: utf-8 -*
    # Created by YangYongming at 2018/12/10 17:16
    # FileName: main.py
    
    import os
    import time
    import zipfile
    
    fileslist = []  # 文件列表
    if not os.path.exists("temporary"):
        os.popen("mkdir temporary &> /dev/null")
    
    
    def zip_dir(dirname, zipfilename):
        filelist = []
        if os.path.isfile(dirname):
            filelist.append(dirname)
        else:
            for root, dirs, files in os.walk(dirname):
                for name in files:
                    filelist.append(os.path.join(root, name))
    
        zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
        for tar in filelist:
            arcname = tar[len(dirname):]
            zf.write(tar, arcname)
        zf.close()
    
    
    def Get_Cur_time():
        """
        # 获取当前日期和时间
        :return:
        """
        return time.strftime("%Y-%m-%d-%H-%M-%S")
    
    
    def Judge_filetype(filename):
        """
        # 判断一个文件是都是文本文件
        :param filename: 文件名称
        :return:
        """
        res = os.popen("file %s" % filename)
        if "text" in res.read():
            return True
        else:
            return False
    
    
    def Get_FilesList(path):
        """
        # 获取所有文件列表
        :param path: 文件夹目录
        :return: 所有文件绝对路径组成的列表
        """
        global fileslist
        for root, dir, files in os.walk(path):
            for i in files:
                file = os.path.join(root,i)  # 拿到每个文件的绝对路径
                if os.path.isfile(file):  # 判断一下是否是文件
                    if Judge_filetype(file):  # 判断是否是文本文件
                        if os.access(file, os.R_OK):  # 判断文件是都可读
                            fileslist.append(file)  # 添加到文件列表中
        return fileslist
    
    
    def Content_Keyword(keyword):
        """
        # 基于文件内容关键字查询
        :param keyword: 关键字
        :return:
        """
        # 创建存储目录
        global number
        dir = "%s[Content:%s]" % (curtime, keyword)
        os.popen("cd temporary && mkdir %s" % dir)
        for i in fileslist:
            # 基于linux命令拿到匹配到文本的行号
            result_obj_line = os.popen("grep -n %s %s | cut -d: -f1" % (keyword, i))
            # 读取行号字符串
            result_line_seq = result_obj_line.read()
            # 把行号转换成序列,并且将序列内容连接到一起
            result_line = ''.join(result_line_seq.split())
            # 判断是否都为数字,如果不是全数字,说明匹配到的文本可能是二进制文件或者其他格式文件
            if result_line.isdigit():
                # 输出文件名称和具体的行号,使用split()把一个文件中匹配到的所有行放在一个数组中,防止字符串错乱显示
                print("33[0;32;40m%s  Line:%s33[0m" % (i, result_line_seq.split()))
                number += 1
                # 匹配到的文件-p拷贝到指定文件夹
                os.popen("cd temporary && cp -p %s %s" % (i, dir))
                time.sleep(0.03)
    
        return dir, number
    
    
    def Name_Type_Keyword(keyword):
        """
        # 基于文件名称查找
        :param keyword: 关键字
        :return:
        """
        # 创建存储目录
        global number
        dir = "%s[NameType:%s]" % (curtime, keyword)
        os.popen("cd temporary && mkdir %s" % dir)
        for i in fileslist:
            # 拿到文件的基名
            basename = os.path.basename(i)
            # 在基名中查找keyword
            result_basename_obj = os.popen("echo %s | grep %s" % (basename, keyword))
            # 读取查找返回值
            result_basename = result_basename_obj.read()
            # 判断是否有匹配到的内容
            if result_basename.strip():
                # 输出文件名
                print("33[0;32;40m%s33[0m" % i)
                # copy到指定的目录
                os.popen("cd temporary && cp -p %s %s" % (i, dir))
                number += 1
                time.sleep(0.03)
        return dir, number
    
    
    def Time_Keyword(start_time, end_time, timetype):
        """
        # 按照文件创建时间查询
        :param start_time: 起始时间:20181230103050
        :param end_time: 截止时间
        :timetype: ctime文件创建时间,mtime:文件修改时间
        :return:
        """
        global number
        # 创建存储目录
        dir = "%s[%s:%s-%s]" % (curtime, timetype, start_time.strip(), end_time.strip())
        os.popen("cd temporary && mkdir %s" % dir)
        # 拿到起始时间的时间数组
        start_timeArray = time.strptime(start_time, "%Y%m%d%H%M%S")
        end_timeArray = time.strptime(end_time, "%Y%m%d%H%M%S")
        # 拿到截止时间的时间戳
        strt_timeStamp = int(time.mktime(start_timeArray))
        end_timeStamp = int(time.mktime(end_timeArray))
        for i in fileslist:
            # 拿到文件时间戳
            if timetype == "ctime":
                time_Stamp = os.path.getctime(i)
            elif timetype == "mtime":
                time_Stamp = os.path.getmtime(i)
            # 文件创建时间的时间戳在起止时间的时间戳内则匹配
            if strt_timeStamp <= int(time_Stamp) <= end_timeStamp:
                # 拿到文件创建时间数组
                ctimeArray = time.localtime(time_Stamp)
                # 按照指定的时间格式 拿到文件创建时间
                otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", ctimeArray)
                # 输出匹配的文件名和创建时间
                print("33[0;32;40m%s  Time:%s33[0m" % (i, otherStyleTime))
                # copy到指定的目录
                os.popen("cd temporary && cp -p %s %s" % (i, dir))
                number += 1
                time.sleep(0.03)
        return dir, number
    
    
    def Size_Keyword(ge_size, le_size):
        """
        # 按照文件大小查找
        :param ge_size: 文件大小范围最小值[KB]
        :param le_size: 文件大小范围最大值[KB]
        :return:
        """
        # 创建存储目录
        global number
        dir = "%s[Size:%sKB-%sKB]" % (curtime, ge_size, le_size)
        os.popen("cd temporary && mkdir %s" % dir)
        for i in fileslist:
            size_B = os.path.getsize(i)
            size_KB = size_B / float(1024)
            if float(ge_size) <= size_KB <= float(le_size):
                # 输出文件名和文件大小
                print("33[0;32;40m%s  Size:%.2f KB33[0m" % (i, size_KB))
                # copy到指定目录
                os.popen("cd temporary && cp -p %s %s" % (i, dir))
                number += 1
                time.sleep(0.03)
        return dir, number
    
    
    if __name__ == '__main__':
        number = 0
        curtime = Get_Cur_time()
        os.popen("clear")
        print("33[1;31;40m
    Note: Only text files can be manipulated
    33[0m")
        path = input("33[0;36;40mplease input absolute path:33[0m")
        if not os.path.exists(path):
            print("33[0;36;40m%s:Path does not exist!33[0m" % path)
            exit(10)
        res_fileslist = Get_FilesList(os.path.abspath(path))
        print("33[0;36;40mNumber of documents found: %s" % len(fileslist))
        msg = "1.Search based on file content
    " 
              "2.Search based on file name or type
    " 
              "3.Search based on file creation time
    " 
              "4.Search based on file modification time
    " 
              "5.Search based on file size
    "
        num = input("33[0;36;40m%splease choose:33[0m" % msg)
        if num == "1":
            keyword = input("33[0;36;40mPlease enter keyword:33[0m")
            back = Content_Keyword(keyword.strip())
            zip_dir("temporary/%s" % back[0], "temporary/%s.zip" % back[0])
    
    
        elif num == "2":
            keyword = input("33[0;36;40mPlease enter name keyword or type:33[0m")
            back = Name_Type_Keyword(keyword.strip())
            zip_dir("temporary/%s" % back[0], "temporary/%s.zip" % back[0])
    
    
        elif num == "3":
            start_time = input("33[0;36;40mPlease enter a start time:33[0m")
            end_time = input("33[0;36;40mPlease enter a end time:33[0m")
            if bool(end_time) == False:
                end_time = time.strftime("%Y%m%d%H%M%S", time.localtime())
            if start_time.isdigit() and end_time.isdigit() and len(start_time) == 14 and len(end_time) == 14:
                back = Time_Keyword(start_time, end_time, timetype="ctime")
                zip_dir("temporary/%s" % back[0], "temporary/%s.zip" % back[0])
            else:
                print("33[0;31;40mInput error!33[0m")
                exit(3)
    
    
        elif num == "4":
            start_time = input("33[0;36;40mPlease enter a start time:33[0m")
            end_time = input("33[0;36;40mPlease enter a end time:33[0m")
            if bool(end_time) == False:
                end_time = time.strftime("%Y%m%d%H%M%S", time.localtime())
            if start_time.isdigit() and end_time.isdigit() and len(start_time) == 14 and len(end_time) == 14:
                back = Time_Keyword(start_time, end_time, timetype="mtime")
                zip_dir("temporary/%s" % back[0], "temporary/%s.zip" % back[0])
            else:
                print("33[0;31;40mInput error!33[0m")
                exit(4)
    
    
        elif num == "5":
            ge_size = input("33[0;36;40mPlease enter a minimum file size[KB]:33[0m")
            le_size = input("33[0;36;40mPlease enter a maximum file size[KB]:33[0m")
            if ge_size.isdigit() and le_size.isdigit():
                back = Size_Keyword(ge_size, le_size)
                zip_dir("temporary/%s" % back[0], "temporary/%s.zip" % back[0])
            else:
                print("33[0;31;40mInput error!33[0m")
                exit(5)
    
        else:
            print("33[0;31;40mInput error!33[0m")
            exit(1)
    
        try:
            print("33[0;36;40mTotal number of documents: %s33[0m" % back[1])
        except:
            pass
    View Code

    运行截图:

    二、windows批量pingIP地址/地址段,

    sfle:每行一个IP或者网段 

    upip:存放up的ip

    downip: 存放down的ip

    #!/usr/bin/env python
    # -*- coding: utf-8 -*
    # Created by YangYongming at 2018/11/25 12:26
    # FileName: ping.py
    
    import os
    import IPy
    import queue
    import threading
    import time
    
    
    class MyThread(threading.Thread):
        def __init__(self, queue):
            threading.Thread.__init__(self)
            self.queue = queue
    
        def run(self):  # 定义每个线程要运行的函数
            global aliveip
            global downip
            while True:
                host = self.queue.get(timeout=2)  # 从队列中取Ip
                host = str(host)
                res = os.popen("ping -n 3 %s" % host)
                os.popen("exit
    ")
                if "ms" not in res.read():
                    print(">>>   %s is Down" % host)
                    downip.append(host)
                else:
                    print(">>>   %s is UP" % host)
                    aliveip.append(host)
                self.queue.task_done()
                if self.queue.empty():  # 当队列为空时,终止该线程
                    break
    
    
    if __name__ == '__main__':
        start = time.time()  # 程序开始时间
        print("
       Yongming working for you......
    ")
        print("
       start......
    ")
        with open("upip", "w", encoding="utf-8") as tmp1, open("downip", "w", encoding="utf-8") as tmp2:
            pass  # 清空文件
        threadlist = []  # 线程列表
        queue = queue.Queue()  # 队列
        aliveip = []  # UP IP列表
        downip = []  # DOWN IP列表
        num = 0  # 线程数量
        with open("sfile", "r", encoding="utf-8") as f1:
            for line in f1.readlines():  # 读取IP文件
                ip = IPy.IP(line)  # 获取每个网段的IP地址列表
                for x in ip:
                    num += 1  # 计算有多少个IP地址,决定开多少线程
                    queue.put(x)  # 向队列里面放IP
        if num >= 100:
            num = 100  # 设置线程数量不超过100
        for i in range(num):
            t = MyThread(queue)  # 建立线程,传入队列
            t.setDaemon(False)  # 主线程执行完成,等待所有的前台线程执行完毕,默认[等待]False
            t.start()  # 线程准备就绪,等待CPU调度
    
        queue.join()  # 队列为空在进行以下操作
    
        with open("downip", "a", encoding="utf-8") as f1:
            for i in downip:
                f1.write(i + '
    ')  # DOWN的IP写入文件
        with open("upip", "a", encoding="utf-8") as f2:
            for i in aliveip:
                f2.write(i + '
    ')  # UP的IP写入文件
    
        end = time.time()  # 结束时间
        elapsed = end - start  # 计算总耗时
        print("
    UP:%s" % len(aliveip))  # 输出UP的IP数量
        print("DOWN:%s" % len(downip))  # 输出DOWN的IP数量
        print("
    Time taken: %d seconds
    " % elapsed)  # 输出总耗时
        input("
    Enter to Quit:")
        time.sleep(30)  # 等待10s退出
    View Code

     运行截图:

     三,比较AB两个IP列表的不同

    Afile:存储AIP列表

    Bfile:存储BIP列表

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*
     3 # Created by YangYongming at 2018/12/04 14:53
     4 # FileName: ipCompar.py
     5 
     6 
     7 def Check_Ip(filename):
     8     with open(filename, "r", encoding="utf-8") as file1:
     9         for i in file1.readlines():
    10             try:
    11                 IP(i.strip())
    12             except Exception:
    13                 if i.strip():
    14                     print("[Err]IP address format: %s in %s" % (i.strip(), filename))
    15                 else:
    16                     print("[Err]There are blank lines: in %s" % filename)
    17                 exit(100)
    18 
    19 
    20 def Contrast_Ip(Afile, Bfile):
    21     excle = xlwt.Workbook(encoding="utf-8")
    22     sheet = excle.add_sheet('sheet 1')
    23 
    24     style0 = xlwt.XFStyle()
    25     al = xlwt.Alignment()
    26     al.horz = 0x02
    27     al.vert = 0x01
    28     style0.alignment = al
    29     pattern = xlwt.Pattern()
    30     pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    31     pattern.pattern_fore_colour = xlwt.Style.colour_map['gray40']
    32     style0.pattern = pattern
    33 
    34     style1 = xlwt.XFStyle()
    35     al = xlwt.Alignment()
    36     al.horz = 0x02
    37     al.vert = 0x01
    38     style1.alignment = al
    39 
    40     for i in range(0, 3):
    41         col = sheet.col(i)
    42         col.width = 256 * 20
    43 
    44     sheet.write(0, 0, 'Only_IN_%s' % Afile, style0)
    45     sheet.write(0, 1, 'Only_IN_%s' % Bfile, style0)
    46     sheet.write(0, 2, 'Both', style0)
    47 
    48     with open(Afile, "r+") as file1:
    49         A_ip = file1.readlines()
    50         for i in range(0, len(A_ip)):
    51             A_ip[i] = A_ip[i].strip()
    52     A_IPSET = set(A_ip)
    53 
    54     with open(Bfile, "r+") as file2:
    55         B_ip = file2.readlines()
    56         for i in range(0, len(B_ip)):
    57             B_ip[i] = B_ip[i].strip()
    58     B_IPSET = set(B_ip)
    59 
    60     for i, k in enumerate(A_IPSET.difference(B_IPSET), 1):
    61         sheet.write(i, 0, str(k), style1)
    62 
    63     for i, k in enumerate(B_IPSET.difference(A_IPSET), 1):
    64         sheet.write(i, 1, str(k), style1)
    65 
    66     for i, k in enumerate(B_IPSET.intersection(A_IPSET), 1):
    67         sheet.write(i, 2, str(k), style1)
    68 
    69     excle.save("Ming[%s].xls" % Time)
    70 
    71     return True
    72 
    73 
    74 if __name__ == '__main__':
    75     import xlwt
    76     import time
    77     from IPy import IP
    78 
    79     Time = time.strftime("%H-%M-%S")
    80     print("
    Yongming working for you......
    ")
    81     time.sleep(3)
    82 
    83     Check_Ip(filename="Afile")
    84     Check_Ip(filename="Bfile")
    85 
    86     if Contrast_Ip("Afile", "Bfile"):
    87         print("Success, please check Ming[%s.xls]" % Time)
    88         time.sleep(0.5)
    89     else:
    90         print("[Err] in Contrast_Ip()")
    91 
    92     input("
    Enter to Quit:")
    93 
    94     print("Quit after 3 seconds......")
    95 
    96     time.sleep(3)
    View Code

     运行结果:会在当前目录生成一个excle文件,如下:

    四:我的方法

      1 #!/usr/bin/env python
      2 # -*- coding: utf-8 -*
      3 # Created by YangYongming at 2018/11/19 17:46
      4 # FileName: ming.py
      5 import os
      6 import sys
      7 import zipfile
      8 import threading
      9 import queue
     10 import IPy
     11 
     12 
     13 def Function_Validation(origin_func):
     14     """
     15     对类的方法进行验证
     16     :param origin_func:源函数名称
     17     :return:源函数的返回值
     18     """
     19 
     20     def wrapper(self, *args, **kwargs):
     21         """
     22         :param self: 可以直接调用类中的字段和方法
     23         :param args: 参数
     24         :param kwargs: 参数
     25         :return:
     26         """
     27         import hashlib
     28         md5 = hashlib.md5()
     29         # 对类识别码取MD5加密数据
     30         md5.update(bytes(str(self.password), encoding="utf-8"))
     31         if md5.hexdigest() != yangym.PASS:
     32             print("Error yangym()类识别码错误")
     33             exit(100)
     34         try:
     35             # 执行源函数
     36             u = origin_func(self, *args, **kwargs)
     37             # 返回原函数的返回值给外层函数
     38             return u
     39         except Exception:
     40             # self.revive() #不用顾虑,直接调用原来的类的方法
     41             return 'origin_func an Exception raised.'
     42 
     43     return wrapper
     44 
     45 
     46 class yangym():
     47     # 类入口验证码,实例化yangym时,必须携带PASS[password]字段,只有匹配才能执行类中的方法
     48 
     49     PASS = "05a7319bcb20e06fa52a3dc3685f5f84"
     50 
     51     def __init__(self, password):
     52         # password 实例化类的验证码。
     53         self.password = password
     54 
     55     @Function_Validation
     56     def Del_Blank_Line(self, filename):
     57 
     58         """
     59         清除文件空白行空白行
     60         :param filename: 文件名称
     61         :return: True 成功;False 失败
     62         """
     63         try:
     64             with open(filename, "r+", encoding="utf-8") as infp:
     65                 lines = infp.readlines()  # 把源文件内容读出来保存在lines中
     66             with open(filename, "w+", encoding="utf-8") as outfp:
     67                 for li in lines:
     68                     if li.split():  # 判断是否为空白行
     69                         outfp.writelines(li)  # 将操作后的源文件覆盖写回
     70         except FileNotFoundError as e:
     71             print("[Err] No such file or directory: %s " % filename)
     72             return False
     73         except IOError:
     74             print("[Err] Permission deny: %s" % filename)
     75             return False
     76         except Exception as e:
     77             print("[Err:Del_Blank_Line()] %s" % e)
     78             return False
     79         else:
     80             return True
     81 
     82     @Function_Validation
     83     def Get_IpList(self, filename, repeat=False):
     84         """
     85         在文件中获取合法的IP地址
     86         :param filename: 文件名称
     87         :param repeat: 去除重复行,True去除,False不去除
     88         :return: 返回ip地址序列
     89         """
     90         import re
     91         try:
     92             with open(filename, "r", encoding="utf-8") as file1:
     93                 line = file1.read()
     94                 line = re.sub(r"[!@#$%^&*-+_~?/|\]", " ", line)
     95                 pattern = re.compile(
     96                     r"(?:(?:d{1,2}|1d{2}|2[0-4]d|25[0-5]).){3}(?:d{1,2}|1d{2}|2[0-4]d|25[0-5])")
     97                 list_ip = pattern.findall(line)
     98                 if len(list_ip) == 0:
     99                     return list_ip
    100         except FileNotFoundError:
    101             print("[Err] No such file or directory: %s " % filename)
    102             return False
    103         except IOError:
    104             print("[Err] Permission deny: %s" % filename)
    105             return False
    106         except Exception as e:
    107             print("[Err:Get_IpList()] %s" % e)
    108             return False
    109         else:
    110             if repeat == True:
    111                 return set(list_ip)
    112             elif repeat == False:
    113                 return list_ip
    114 
    115     @Function_Validation
    116     def Get_CheckCode(self, n=6):
    117         """
    118         获取有大小写字母、数字组成的随机n位验证码
    119         :param num: 验证码位数,默认为6
    120         :return: 返回n位验证码
    121         """
    122         import random
    123         check_code = str()
    124         code = str()
    125         for i in range(n):
    126             ret = random.randint(0, 9)
    127             if ret == 0 or ret == 1 or ret == 4 or ret == 7:
    128                 code = str(ret)
    129             elif ret == 2 or ret == 5 or ret == 8:
    130                 code = chr(random.randint(65, 90))
    131             elif ret == 3 or ret == 6 or ret == 9:
    132                 code = chr(random.randint(97, 122))
    133             check_code = check_code + code
    134         return check_code
    135 
    136     @Function_Validation
    137     def SendMail(self, SenderName, SenderMail, Password, ReceList, Theme, Text, CcList=[], Appendix=None, Port=25, ):
    138         """
    139         发送邮件
    140         :param SenderName: 发送者昵称
    141         :param SenderMail: 发送者邮箱
    142         :param Password: 邮箱密码/授权吗
    143         :param ReceList: 收件人列表
    144         :param Theme: 邮件主题
    145         :param Text: 邮件正文
    146         :param CcList: 抄送人列表[可选参数]
    147         :param Appendix: 附件全路径,不可以使用中文[可选参数]
    148         :param Port: 端口,[可选参数],默认"25"
    149         :return True:发送成功,False:发送失败
    150         """
    151         ret = True
    152         try:
    153             import smtplib, os
    154             from email.mime.text import MIMEText
    155             from email.utils import formataddr
    156             from email.mime.multipart import MIMEMultipart
    157             from email.mime.application import MIMEApplication
    158 
    159             msg = MIMEMultipart('alternative')
    160 
    161             msgText = MIMEText(Text, "Plain", "utf-8")
    162 
    163             msg["from"] = formataddr([SenderName, SenderMail])
    164             msg["To"] = ",".join(ReceList)
    165             msg["Cc"] = ",".join(CcList)
    166             msg["Subject"] = Theme
    167 
    168             if Appendix != None:
    169                 attachName = os.path.basename(Appendix)
    170                 part = MIMEApplication(open(Appendix, 'rb').read())
    171                 part.add_header('Content-Disposition', 'attachment', filename=attachName)
    172                 msg.attach(part)
    173 
    174             msg.attach(msgText)
    175 
    176             if Port == 25:
    177                 server = smtplib.SMTP("smtp.163.com", 25)
    178             elif Port == 465:
    179                 server = smtplib.SMTP_SSL("smtp.163.com", 465)
    180 
    181             server.login(SenderMail, Password)
    182             server.sendmail(SenderMail, ReceList, msg.as_string())
    183             server.quit()
    184         except ModuleNotFoundError as e1:
    185             print("[Err] %s" % e1)
    186             ret = False
    187         except Exception as e2:
    188             print("[Err:SendMail()] %s" % e2)
    189         return ret
    190 
    191     @Function_Validation
    192     def Copy_AToB_File(self, fileA, fileB):
    193         """
    194         把文件A的内容追加到文件B中
    195         :param fileA: 源文件
    196         :param fileB: 目标文件
    197         :return: 成功返回True, 失败返回False
    198         """
    199         try:
    200             with open(fileA, "r", encoding="utf-8") as A, open(fileB, "r+", encoding="utf-8") as B:
    201                 Afile = A.readlines()
    202                 B.seek(0, 2)
    203                 for i in Afile:
    204                     B.writelines(i.strip() + "
    ")
    205         except FileNotFoundError as e:
    206             print("[Err] %s" % e)
    207             return False
    208         else:
    209             return True
    210 
    211     @Function_Validation
    212     def IpCount(self, ipfile):
    213         """
    214         统计每个IP地址出现的次数
    215         :param ipfile: 包含纯IP地址的文件,每行一个,不要出现空白行
    216         :return: 返回一个字典{IP地址:次数,}
    217         """
    218         sip = []
    219         dic = {}
    220         try:
    221             with open(ipfile, "r+", encoding="utf-8") as f1:
    222                 for i in f1.readlines():
    223                     sip.append(i.strip())
    224         except FileNotFoundError:
    225             print("[Err] No such file or directory: %s " % ipfile)
    226             return False
    227         else:
    228             setip = set(sip)
    229             for i in setip:
    230                 num = sip.count(i)
    231                 dic[i] = num
    232             return dic
    233 
    234     @Function_Validation
    235     def IpQuery(self, ip):
    236         """
    237         :param ip: IP地址
    238         :return: 执行成功返回归属地址信息,执行失败返回"False"
    239         """
    240         import requests
    241         from bs4 import BeautifulSoup
    242         url = 'http://m.ip138.com/ip.asp?ip='
    243         kv = {'User-Agent': 'Mozilla/5.0'}
    244         link = url + str(ip)
    245         try:
    246             r = requests.get(link, headers=kv)
    247             r.raise_for_status()
    248             r.encoding = r.apparent_encoding
    249             soup = BeautifulSoup(r.text, 'lxml')
    250             result = soup.select('p[class="result"]')[0].string
    251             return result
    252         except requests.HTTPError:
    253             return False
    254 
    255     @Function_Validation
    256     def Get_FilesList(self, dirpath):
    257         fileslist = list()
    258         for root, dir, files in os.walk(dirpath):
    259             for i in files:
    260                 file = os.path.join(root, i)  # 拿到每个文件的绝对路径
    261                 if os.path.isfile(file):  # 判断一下是否是文件
    262                     fileslist.append(file)  # 添加到文件列表中
    263         return fileslist
    264 
    265     @Function_Validation
    266     def zip_dir(self, dirname, zipfilename):
    267         """
    268         :param dirname: 需要打包的文件或目录名称
    269         :param zipfilename: 目标文件名
    270         :return:
    271         """
    272         filelist = list()
    273         if os.path.isfile(dirname):
    274             filelist.append(dirname)
    275         else:
    276             for root, dirs, files in os.walk(dirname):
    277                 for name in files:
    278                     filelist.append(os.path.join(root, name))
    279 
    280         zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
    281         for tar in filelist:
    282             arcname = tar[len(dirname):]
    283             zf.write(tar, arcname)
    284         zf.close()
    View Code
  • 相关阅读:
    C语言文本文件实现局部修改
    TTMS框架设计思路及实例介绍
    浅谈函数与操作符的重载
    Java:继承与多态
    Java:类与对象(二)
    Java : 类与对象(一)
    C语言 数的阶乘、高次幂、大数加法及大数乘法
    C语言下的位运算
    enum:枚举类型介绍与简单使用
    C语言实现字符界面下的学生管理成绩系统
  • 原文地址:https://www.cnblogs.com/ming5218/p/10118937.html
Copyright © 2011-2022 走看看