python基础知识

运行环境

pycharm

下载地址:Download PyCharm: Python IDE for Professional Developers by JetBrains

IDLE

.py文件右键edit with IDLE

vs code

安装相应的python插件,进行.py文件的编写,会有相应的提示

cmd 交互式运行环境

cmd 输入python回车

也可以先写好python文件.py

然后在cmd里 python 1.py进行运行

ipython

pip install ipython

拥有代码高亮、cls一键清屏等便捷方式

全局方法

assert

断言

可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。

def overage18(age):
    assert age >= 18, print("对不起未满18岁,无法进行游戏")
    print("享受欢乐游戏时光")

overage18(11)

print

print("输出%d的序号"%(N))

输入数字占位符%d, 输入文字占位符%s 

price={'苹果':1, '梨子':2}

for fruit in price:
    print("%s的价格%d元一斤"%(fruit, price[fruit]))

不换行

for i in range(3):
    print(i*2+1, end='+')

结果: 1+3+5+

end= 字符串内为连接词

input

N=2
input('请输入%d的序号:'%(N))

type

查看数据类型 

print(type('a'))

dir

查看包中的所有方法

import shutil
print(dir(shutil))

循环

for i in range(0, 10)

从0循环到9

class1 = set()
for i in range(0,3):
    name = input('请输入%d姓名:'%(i+1))
    class1.add(name)
print(class1)

注释

单行注释

# 单行注释
print(1+1)

多行注释 

'''
多行注释
3个单引号或3个双引号(英文)开头和结尾
'''
print(1+1)

字典

初始化

可以用a = {}或者a = dict()

a={'a':1, 'b':2}

取值

print(a['a'])

如果该值不在字典中,强行取值会报错

可以用if判断是否在字典中

if 'b' in a:
    print(a['b'])

集合

集合初始化a = set()或者a={1,2,'a'}

不能为{}会被视为空字典

add

a.set('a')

remove

a.remove('a')

其他类型转换为集合

字符串

w='abc'

数组

arr=[1,2,3]

元组

y=(1,2,'abc')

字典

字典转换为集合,只会保留key,如

a={'a':1, 'B':2}
b = set(a)
print(a,b)

集合的访问方式

集合是无序的,所以不能用索引的方式访问,可以使用遍历的方式访问

for item in a:
    print(item)

集合之间的运算 

交集

c=set('cda')
b=set('bcd')
print(c&b)
print(c.intersection(b))

并集

c=set('123')
b=set('234')
print(c|b)
print(c.union(b))

差集

c=set('123')
b=set('234')
print(c-b)
print(c.difference(b))

结果为{‘1’}

谁调用,以谁为主,上述代码中是求的c的差集

布尔

足球比赛

a能力12,b能力8,c能力13,判断a和b、c比赛,a赢得3分,a平得1分,a输不得分,a能拿多少分?

a=12
b=8
c=13
vsB = (a>b)*3 + (a==b)*1
vsC = (a>c)*3 + (a==c)*1
print(vsB + vsC)

 列表 [ ]

初始化

a=list()或者a=[]

a = [1, 2, 3, 4, 5, 6, 7 ]

a[0]

append

a=list()
a.append(10)

del

a=[6,5,7,8]
a.append(10)
print(a)
del a[2]
print(a)

列表推导式

 [表达式 for 迭代变量 in 列表 表达式]

lists=[1,2,3]
my_list = []
my_list = [i*2 for i in lists if i > 1]
print(my_list)

输出:[4, 6] 

复杂推导式

my_list = []
my_list = [i*2 for i in range(3) if i > 0 for j in range(2) if j > 0]
print(my_list)

输出: [2, 4]

my_list = []
my_list = [i*2 for i in range(3) if i > 0 for j in range(2)]
print(my_list)

输出: [2, 2, 4, 4]

理解

# i*2 for i in range(3) if i > 0 for j in range(2) if j > 0
for i in range(3):
    if i > 0:
        for j in range(2):
            if j > 0:
                my_list.append(i*2)

在 Python3 中列表推导式具备局部作用域,表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。所以其不会有变量泄漏的问题。例如下述代码:

x=6
my_list=[]
my_list=[x*2 for x in range(3)]
print(my_list)
print(x)

 输出:[0, 2, 4]
            6

随机生成多维数组

import numpy as np

# 随机取0-1之间的整数,大小为10*10
# randint(0, 2 包含0,不包含2
x = np.random.randint(0, 2, size=[10,10])
print(x)

面向过程和面向对象

当事物及其复杂的时候使用面向对象

类的主函数__init__

类的方法前需要加装饰器@classmethod

class Student:
    def __init__(self, xm, age):
        self.name = xm
        self.age = age

    def show(self):
        print(f'名字:{self.name},年龄:{self.age}')

    @classmethod
    def cm():
        print('类的方法')

stu=Student('lily',12)
#Studeng(xm:'lily', age:12)
stu.show()

插件库

 time

获取时间戳

import time
my_list = []

def demo1():
    for i in range(10000000):
        my_list.append(i*2)

def demo2():
    my_list = [i*2 for i in range(10000000)]

s_t = time.perf_counter()
demo1()
e_t = time.perf_counter()

print(e_t - s_t)

demo1:0.8120500997081399

demo2:0.5934765998087823

好像不是很明显,翻倍20000000也只差0.4毫秒

实战

移动文件 - 简易版

os导入系统库

shutil实现移动文件需要用到的库 

import os #os导入系统库
import shutil #shutil实现移动文件需要用到的库 

files = input('输入文件地址:')
output_dir = input('输入要存入的地址:')
#判断输入的地址是否是一个文件,文件的后缀是否是txt格式
if os.path.isfile(files) and files.endswith('.txt'):
    print("move %s"%(files))
    #移动文件到指定目录
    shutil.move(files, output_dir)

输入文件地址:./miao/2.txt

输入要存入的地址:./wan

移动文件 - 升级版

import os
import shutil

def search_path(path, result):
    #listdir得到path下的目录和文件
    child_files = os.listdir(path)
    for child in child_files:
        #得到完整地址
        child = os.path.join(path, child)
        #地址存入result
        result.append(child)
        #如果该地址是一个文件夹,则继续递归
        if os.path.isdir(child):
            search_path(child, result)

files = input('输入文件目录地址:')
output_dir = input('输入要存入的地址:')
results=list()
search_path(files, results)

for file in results:
    if os.path.isfile(file) and file.endswith('.txt'):
        print("move %s"%(file))
        shutil.move(file, output_dir)

得到结果

csv转换shp

from shapely import wkt
import pandas as pds
import geopandas as gpds

data = pds.read_csv('./data/my.csv')
data['lon'] = data['x'].astype('str')
data['lat'] = data['y'].astype('str')
data['point'] = 'point('+data['lon']+' '+data['lat']+')'
# 将point转为geometry类型
data['point'] = data['point'].apply(wkt.loads)
# 将数据转为geopandas类型
pdf = gpds.GeoDateFormat(data)
# 指定数据的geometry为上面新建的point字段
pdf.set_geometry('point', inplace=True)
# 利用geopandas的文件导出方法将文件导出为shp
pdf.to_file('./data/my.shp', crs='EPSG:4326', encoding='utf-8')

其他

一个根据链接自动分析请求头、参数、cookie的在线工具

Convert curl commands to code (curlconverter.com)

在浏览器中打断点后,可以在控制台输出其上下语句环境相关变量(包含局部变量) 

安装插件库

 pip install 名称

pip install PyExecJS2

临时换源

# 下载python中的Django包,这里使用的是豆瓣源
pip install django -i http://pypi.douban.com/simple 

安装命令

pip install -r

命令 -r 用于读取一个文件,并根据该文件中列出的依赖项来安装相应的库。该文件通常是一个文本文件,其中每一行包含一个要安装的库及其版本信息(如果指定了版本)。具体格式如下:

pip install -r requirements.txt

这里的 requirements.txt 是一个常见的文件名,它包含了项目所需的全部Python包列表。当你运行上述命令时,pip会解析这个文件,然后按照文件中列举的顺序逐个下载并安装这些库。

这对于项目管理非常有用,因为你可以轻易地为项目复制粘贴和共享这个依赖列表,确保所有人在安装项目环境时都能得到一致的结果。

 python执行js代码

安装Python 中使用 JavaScript 引擎的库

pip install PyExecJS2

pyexecjs和pyexecjs2的区别,pyexecjs2是轻量级的,只支持nodejs,pyexecjs支持多种javascript引擎,包括 Node.js、PhantomJS、SlimerJS 等。

 在.py文件中引入

import execjs

这里我放在同一目录下了

在demo1.js中写一个方法

// npm install crypto-js 加密方式 - 标准加密
const CryptoJS = require('crypto-js');

// 解密 - 标准加密
 function b(t) {
       var e = CryptoJS.enc.Utf8.parse('EB444XXXX')
              , n = CryptoJS.enc.Utf8.parse('B5A817XXXXXXXXX')
              , a = CryptoJS.AES.decrypt(t, e, {
                iv: n,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            return a.toString(CryptoJS.enc.Utf8)
  }

在.py中执行demo1.js的方法

import execjs

...

with open('./demo1.js', 'r', encoding='utf-8') as f:
    js_file = f.read()

ctx = execjs.compile(js_file).call('b', res['Data'])
print(ctx)

异常处理

try:
   a = 1/'0'
except ZeroDivisionError:
    print('零溢出情况,如除0')
except ValueError:
    print('类型异常,如数字除字符串')
except BaseException:
    print('其他异常情况')
else:
    print('执行try内代码无异常')
finally:
    print('无论异常与否都会最终执行')

加密

http头部加密

Accept-EncKey:

js混淆

方1:将每一个变量放在控制台进行打印,替换

方2:直接下载对应的方法包,替换,部分对象的参考值全部复制过来,找到方法的声明位置直接copy,有时也不一定要扣方法,可以使用返回的结果

cookie加密

静态cookie

第一次请求,不携带cookie,获取一段js代码

js代码生成cookie,发起第二次请求,请求成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值