目录

  • 1.根据当前时间戳,创建新文件夹
  • 2.把小数转化为百分比形式
  • 3.需要获取指定目录下面的所有文件:
  • 4.os
  • 5. 实时获取Android手机的日志
  • 6. 豆瓣top250爬虫
  • 6.根据ip地址查询归属地
  • 7.如何查询集合的差集?


打印hello world

#!/usr/bin/python
# -*- coding: UTF-8 -*-



if __name__ == '__main__':
    print("hello world")

//pip清华源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

1.根据当前时间戳,创建新文件夹

使用场景:如果需要多次重复的产出文件,可以通过如下的方式来根据时间戳创建新的文件夹,用来区分存储文件。

def getCurrentTime(dirPath):
    """
    根据时间戳,创建指定输出文件
    :param dirPath:
    :return:
    """
    if os.path.exists(dirPath+time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))):
        print("error:此文件夹已经存在,请检查后,自行删除此时间戳下的文件夹")
    else:
        print("不存在")
        os.makedirs(dirPath+time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))
        print("创建 {} 成功".format(dirPath+time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))))
    print(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))

效果

如何将百分数化成小数 python_python


如何将百分数化成小数 python_安卓_02

2.把小数转化为百分比形式

使用场景:需要把计算出来的小数转化为百分数形式,且结果保留两位小数形式

def getPercent(doubleNum):
    """
    把小数转化为百分数
    :param doubleNum: double类型参数
    :return: 如:97.25%
    """
    return "%.2f%%" % (doubleNum * 100)

效果:

如何将百分数化成小数 python_python_03

3.需要获取指定目录下面的所有文件:

def getFiles(Path):
    """
    传入指定的路径,打印路径下面的所有文件
    :param Path: 路径
    :return:
    """
    for i in os.listdir(Path):
        print(i)

效果:

如何将百分数化成小数 python_安卓_04

如何将百分数化成小数 python_python_05

4.os

与文件相关的函数:

def getFatherPath(path):
    """
    获取指定路径下面文件夹的父路径
    :param path: 文件路径
    :return: 
    """
    print(os.path.dirname(path))
def getFatherPath(path):
    """
    相关api
    :param path: 文件路径
    :return:
    """
    print(os.path.dirname(path))

    # 当前文件的路径
    # pwd = os.getcwd()
    # 当前文件的父路径
    father_path = os.path.abspath(os.path.dirname(path) + os.path.sep + ".")
    # 当前文件的前两级目录
    grader_father = os.path.abspath(os.path.dirname(path) + os.path.sep + "..")

    # print(pwd)
    print(father_path)
    print(grader_father)

效果:

如何将百分数化成小数 python_android_06

5. 实时获取Android手机的日志

使用场景:有的时候我们需要在控制台中同步刷新安卓手机的日志,这时候就需要我们通过如下方法,来实时在控制台中打印日志,分析日志
order就是命令,相当于在dos窗口中输出adb命令,来获取安卓日志

import subprocess
def getAndroidLogcat():
    """
    实时获取安卓手机的日志
    :return:
    """
    order="adb logcat -v time"
    pi = subprocess.Popen(order, shell=True, stdout=subprocess.PIPE)
    for i in iter(pi.stdout.readline, 'b'):
        print(i)

效果:

如何将百分数化成小数 python_android_07

6.根据ip地址查询归属地

# -*- coding: UTF-8 -*-
import requests
from bs4 import BeautifulSoup as bs
import re
import msvcrt
import os
#用来获取指定字符串在子串的位置   如获取str2在str1里面的位置
def getStrLocation(str1,str2):
    '''查找指定字符串str1包含指定子字符串str2的全部位置,
       以列表形式返回'''
    lenth2 = len(str2)
    lenth1 = len(str1)
    indexstr2 = []

    i=0
    while  str2 in str1[i:]:
        indextmp = str1.index(str2, i, lenth1)
        indexstr2.append(indextmp)
        i = (indextmp + lenth2)
    return indexstr2

#开始获取html页面全部内容
def getHtml(url):
    # print("获取到的完整url为:{}".format(url))
    header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}
    try:
        #超过5s就不打开了,直接提示timeout
        responce=requests.get(url,headers=header,timeout=5)
        #设置获取到的responce编码为gb2312,这个gb2312是通过responce.encoding/responce.apparent_encoding获取到的
        responce.encoding='GB2312'
        #经过测试,此网站输出为:gb2312
        # print(responce.encoding)
        # print(responce.apparent_encoding)
        # print(len(responce.text))
        # print(responce.text)
        return responce.text
    except Exception as e:
        print("error:爬虫失败,错误信息:{}".format(e))
        return "error:爬虫失败,错误信息:"+str(e)

#开始获取ip信息
def getIpResult(url):
    txt=getHtml(url)

    soup=bs(txt,'html.parser')

    ipLocation=""
    #记录市
    ipcity=""

    #记录省
    ipProvince=""


    #由于我要的信息仅在head里面,所以仅要head里面的信息
    # print()    #Tag
    # print(soup.head.prettify())    #Tag
    # print(soup.script)    #Tag
    # print(soup.head.script)    #Tag

    for tag in soup.head.children:
        if "var ip_result" in str(tag):
            indexBegin=getStrLocation(str(tag),"ASN归属地")
            indexEnd=getStrLocation(str(tag),"iP段")
            # print()
            #获取到所有的地址信息
            ipLocation=str(tag)[indexBegin[0]+9:indexEnd[0]-4]
            #获取到省信息
            ipProvince = ipLocation.split("省")[0]
            #获取到市的信息
            cityIndex=getStrLocation(ipLocation,"省")
            ipcity=ipLocation.split(" ")[0][cityIndex[0]+1:-1]
    ipIndex1=int(getStrLocation(url,"=")[0])+1
    ipIndex2=int(getStrLocation(url,"&")[0])

    if ipProvince != "":
        print("您要查询的{}地址归属地全部信息为:{}".format(url[ipIndex1:ipIndex2],ipLocation))
        print("您要查询的{}地址所在省为:{}".format(url[ipIndex1:ipIndex2],ipProvince))
        print("您要查询的{}地址所在市为:{}".format(url[ipIndex1:ipIndex2],ipcity))
        # text="您要查询的"+url[ipIndex1:ipIndex2]+"地址归属地全部信息为:"+ipLocation+
        # "\nip地址所在省为:"+ipProvince+"\nip地址所在市为:"+ipcity
        #拼接字符串
        a=('您要查询的',url[ipIndex1:ipIndex2],'地址归属地全部信息为:',ipLocation)
        b=('ip地址所在省为:',ipProvince,',','ip地址所在市为:',ipcity)
        c="".join(a)
        d="".join(b)
        e=(c,d)
        text="\n".join(e)
        outFile(text)
    else:
        print("error:ip地址可能出现问题,请检查无误后,再进行查询")
        # print("请按任意键退出~")
        os.system('pause')

#正则表达式,用来判断是否是正规ip地址
def isLegal(ipaddress):
    real = re.compile(r'^(((25[0-5]|2[0-4]\d|1\d{2})|([1-9]?\d))\.){3}((25[0-5]|2[0-4]\d|1\d{2})|([1-9]?\d))$')
    if real.search(ipaddress):
        return True
    else:
        return False

#获取指定路径下面文件里面的信息
def getTextIpInfo(txtPath):
    with open(txtPath, "rt") as in_file:
        text = in_file.read()
    #最好还是帮用户去除一下空格,防止让用户没发现自己还多打了几个空格,导致ip出错
    return text.strip()
    # print("ip地址为:{}".format(text))
    # print("ip地址长度为:{}".format(len(text)))

def outFile(text):
    with open("outText.txt", "w") as out_file:
        out_file.write(text)
    print("ip信息已经成功写入outText.txt中,请查收")
    # print("请按任意键退出~")
    # os.system('pause')



if __name__ == '__main__':
    #标准输入专用
    ipaddress=input()

    #命令行专用
    # ipaddress = sys.argv[1]

    #读取文件专用
    # ipaddress = getTextIpInfo("ipInfo.txt")


    if isLegal(ipaddress):
        # print("合法")
        url='https://www.ip138.com/iplookup.asp?ip='+ipaddress+'&action=2'
        getIpResult(url)
    else:
        print("检测到您的ip并不合法,请输入合法的ip地址")

7.如何查询集合的差集?

具体需求就是两个集合,里面有一个个的元组,求元组里面的第一个值的差集
A={(‘test1’,3),(‘test2’,4),(‘test3’,4)}
A={(‘test2’,3),(‘test3’,4),(‘test4’,4)}

print("本周新上新的电影:"+str(list((filter(lambda t: t[0] not in {t[0] for t in B}, A)))))  #A-B
print("本周新下榜的电影:"+str(list((filter(lambda t: t[0] not in {t[0] for t in A}, B)))))	B-A

输出   ('test1',3)
输出  ('test4',4)

解释:
filter()函数是一个高阶函数,它接受一个函数和一个可迭代对象作为参数,然后返回一个迭代器,其中包含了原可迭代对象中满足函数条件的元素。
lambda t: t[0] not in {t[0] for t in y} 是一个匿名函数,它接受一个元组t作为参数,然后判断t的第一个元素是否在集合{t[0] for t in y}中,如果不在则返回True,否则返回False。
{t[0] for t in y} 是一个集合推导式,它遍历y中的每个元组t,然后把t的第一个元素加入到集合中。例如:y = {(1, 2), (7, 8)}; {t[0] for t in y} # 输出{1, 7}
x 是第一个集合,例如:x = {(1, 2), (3, 4), (5, 6)}
list()函数是一个内置函数,它接受一个可迭代对象作为参数,然后把它转换成列表。