Python开始学习的19~21天
ret = re.search(r'(?P<name>\d{2})(?P<name1>\w{2})+','45bdh"ab"3')
print(ret.group())
ret=re.sub('\d','abc','alvin5yuan6',1)
print(ret)#alvinabcyuan6
ret=re.subn('\d','abc','alvin5yuan6')
print(ret)#('alvinabcyuanabc', 2) # 告诉你替换了两次
ret = re.finditer('\d', 'ds3sy4784a')
print(ret) # <callable_iterator object at 0x10195f940>
print(next(ret).group()) # 3
print(next(ret).group()) # 4
#__author:Administrator
#date: 2019/4/22
import re
source = '1 - 2 * ((64 - 32 + (-32 / 16) * (16 - 2 * 8 / 8 + 16 / 8 * 128 / 8 * 1024 + 10 * 512 / 8)) - (-4 * 8) / (16 - 8 * 4))'
print(eval((source))) # 2776672.6952380957
计算器:
import re
def str_format(str):
str = str.replace('++', '+')
str = str.replace('-+', '-')
str = str.replace('+-', '-')
str = str.replace('--', '+')
str = str.replace(' ', '')
str = str.replace('/+', '/')
str = str.replace('*+', '*')
return str
def cal_del_add(source):
group_del = '[-]?\d+\.?\d*[-]\d+\.?\d*'
group_add = '[-]?\d+\.?\d*[+]\d+\.?\d*'
if re.search(group_del, source):
ret = re.search(group_del, source).group().split('-')
x = ret[len(ret) - 2]
y = ret[len(ret) - 1]
if len(ret) == 3:
ret = str(-float(x) - float(y))
else:
ret = str(float(x) - float(y))
source = source.replace(re.search(group_del, source).group(), "".join(["+",ret]), 1)
if re.search(group_add, source):
x, y = re.search(group_add, source).group().split('+')
ret = str(float(x) + float(y))
source = source.replace(re.search(group_add, source).group(), "".join(["+",ret]), 1)
source = str_format(source)
return source
def cal_mul_div(source):
group_mul = '[-]?\d+\.?\d**[-]?\d+\.?\d*'
group_div = '[-]?\d+\.?\d*/[-]?\d+\.?\d*'
group = '[-]?\d+\.?\d*[*/][-]?\d+\.?\d*'
ret = re.search(group,source)
if ret:
ret1 = ret.group()
print(ret.group())
x,y = re.findall('[-]?\d+\.?\d*',ret.group())
if ret.group().count("*"):
ret = str(float(x)*float(y))
else:
ret = str(float(x)/float(y))
source = source.replace(ret1,"".join(["+",ret]),1)
source = str_format(source)
return source
if __name__ == '__main__':
print(source)
source = str_format(source)
while re.search('\([^()]+\)',source):
ret = re.search('\([^()]+\)',source).group()
ret1 = re.search('\([^()]+\)',source).group()
while re.search('[-]?\d+\.?\d*[*/][-]?\d+\.?\d*',ret1):
ret1 = cal_mul_div(ret1)
print(ret1)
while re.search('[-]?\d+\.?\d*[+-][-]?\d+\.?\d*',ret1):
ret1 = cal_del_add(ret1)
else:
source = str_format(source.replace(ret, ret1[1:-1]))
print(source)
else:
ret = source
while re.search('[-]?\d+\.?\d*[*/][-]?\d+\.?\d*',ret):
ret1 = cal_mul_div(ret)
source = str_format(source.replace(ret,ret1))
print(source)
ret = ret1
while re.search('[-]?\d+\.?\d*[+-][-]?\d+\.?\d*',ret):
ret1 = cal_del_add(ret)
source = str_format(source.replace(ret,ret1))
print(source)
ret = ret1
else:
source = source[1:]
print(source,type(source),'asdsd')
print(__name__) # 当前模块执行,永远是'__main__',在其他模块则显示foo
if __name__ == '__main__':
hello()
###############################################
模块项目:
web:
web2
__init__.py
logger.py
__init__.py
main.py
__init__.py
bin.py
/////////////////////必须在同一文件夹等级------------
# 如果想拿到他的方法或者名字,只能是calculate.名字或方法
# import calculate # 通过搜索路径找到calculate.py后,将calculate.py的代码给bin.by解释了一遍
# 搜索路径:sys.path
# print(sys.path)
# print(x) # name 'x' is not defined
# print(calculate.x)
import sys
# import time,calculate # 第一种方法,加载两个模块
# from calculate import add,sub,x # 从模块里调用方法或属性 ,该模块只加载了两个方法,一个属性,其他都没有加载
# # print(add(1,4))
# # print(sub(3,6))
# # print(x)
# # print(calculate.x) # 这个没有加载calculate模块,所以会报错
# from calculate import * # 把全部东西都搞过来,即全部都加载
# 下面的这种调用方法是错误的
# import web.logger # NameError: name 'logger' is not defined
# 下面的调用方法是正确的
# from web import logger
# 下面的调用模块的方法和函数是可行的
# from web.web2.logger import logger
# logger()
from web.web2 import logger.logger # 错误的调用方法
# from web.web2.logger #invalid syntaxd
from web import main # 执行了__init__文件
print(main.x) # module 'web' has no attribute 'main'
bin
bin.py
conf
settings.py
所以在bin.py文件想要加载conf模块,只能先添加搜索路径
import sys
import os
print(sys.path) # 查看python环境的搜索路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
# 在上面两行的作用下,下面的模块才能被搜索到,如果没有上面两行的作用,即使能成功
# 只是pycharm他比较友好,但是放在cmd命令下,这种方式就行不通了
from mudule import main
from conf import settings
print(settings.shopping_product[1])
main.main()
/////////////////// -------------------------
# 什么是序列化?
# 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫picking,
# 在其他语言中也被称为serialization,marshalling,flattening等等,都是一个意思
JSON模块
//关于json的dumps()和loads()
import json
dic = {'name':'alex','age':'18'}
data = json.dumps(dic) # 序列化对象到JSON的字符串格式
f = open('JSON_text','w') # 然后写入到文件里面
f.write(data)
f.close()
# 函数和类json做不了
import json
f = open('JSON_text','r')
data = f.read()
# Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python object.
data = json.loads(data)
print(data['name'])
//关于json的dump()和load()
import json
dic = {'name':'alex','age':'18'}
f = open('JSON_text2','w')
json.dump(dic,f)
import json
f = open('JSON_text2','r')
data = json.load(f)
print(data['name'])
PICKLE模块
def foo():
print('OK')
data = pickle.dumps(foo) 加载函数
f = open('PICKLE_text','wb')
f.write(data)
f.close()
import pickle
def foo():
print('ok1')
# 缺点:想要使用加载的方法,则此文件必须有该方法的函数名,而且输出的
# 还是此文件的函数结果
f = open('PICKLE_text','rb')
data = f.read()
data = pickle.loads(data)
data()
Shleve模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象
可读可写:key必须为字符串,而值可以是python所支持的数据类型,
老师建议:能用json尽量用json,少用pickle
import shelve
f = shelve.open('SHELVE_text')
f['info'] = {'name':'alex','age':'18'} # 这样就存进去了
f['shopping'] = {'name':'alex','price':'-1000'}
# f = shelve.open('SHELVE_text')
data = f.get('shopping')
print(data)
d = {'name':'alex','age':'18'}
d['name'] = 'aaa'
data = d.get('name')
data = d.get('name','male') # 取不到这个值,默认返回'male'
print(data)
浙公网安备 33010602011771号