目录
- 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())))
效果
2.把小数转化为百分比形式
使用场景:需要把计算出来的小数转化为百分数形式,且结果保留两位小数形式
def getPercent(doubleNum):
"""
把小数转化为百分数
:param doubleNum: double类型参数
:return: 如:97.25%
"""
return "%.2f%%" % (doubleNum * 100)
效果:
3.需要获取指定目录下面的所有文件:
def getFiles(Path):
"""
传入指定的路径,打印路径下面的所有文件
:param Path: 路径
:return:
"""
for i in os.listdir(Path):
print(i)
效果:
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)
效果:
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)
效果:
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()函数是一个内置函数,它接受一个可迭代对象作为参数,然后把它转换成列表。