假设day21-lessoninin.py
day21-lessonmodulmain
如何把main导入到bin文件中
import sys
sys.path.append(r'C:UsersAdministratorPycharmProjectspython_s3day22day21-lesson')
from modul import main
另一种方法
import sys,os
BASE_DIR=
if __name__='__main__':
# print(__file__)#执行文件的绝对路径 实际是最后的bin.py 其余的是pycharm加的
# print(os.path.dirname(__file__))#上一级的绝对路径到了bin
print(os.path.dirname(os.path.dirname(__file__)))#到了day21-lesson
BASE_DIR=os.path.dirname(os.path.dirname(__file__))#os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR) #在python中按上面执行
os.path.dirname #文件的上一层目录
os.patn.abs #文件的绝对路径
os.getcwd #获取当前工作目录,即当前python脚本工作的目录路径
print(os.getcwd())
os.chdir('test1') #修改工作目录
print(os.getcwd())
#C:UsersAdministratorPycharmProjectspython_s3day22
#C:UsersAdministratorPycharmProjectspython_s3day22 est1
os.makedirs('dirname1dirname2') #可生成多层递归目录
os.remvedirs('dirname1') #若目录为空则删除,并递归到上一层目录,如若也为空,则删除,以此类推
os.makdir('dirname') #生成单级目录
os.rmdir('dirname')#删除单级空目录,若目录不为空则无法删除
os.remove()#删除一个文件
os.listdir('dirname')#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.rename('','')#重命名文件 目录
os.stat('sss.py')#获取文件 目录的相关信息(大小,时间等)
os.sep #输出操作系统特定的路径分隔符windows下为\ linux下为/
os.linesep #输出当前平台使用的行终止符
os.pathsep #分割文件路径的字符串
os.system('dir')
os.path.split(path)#将path分割成目录和文件名二元组返回
os.path.dirname(path)#返回path的目录
os.path.basename(path)#返回path最后的文件名
os.path.exists(path)#如果Path存在,true 不存在false
os.path.isabs(path)#是否是绝对路径
os.path.isfile(path)#是否是存在的文件
os.path.isdir(path)#是否是存在的目录
os.path.join(path1[path2[....]])#将多个路径组合返回,第一个绝对路径之前的参数将被忽略
os.environ #系统环境变量
a='C:UsersAdministratorPycharmProjects'
b='python_s3day22day21-lesson'
os.path.join(a,b)#路径拼接
sys模块
sys.path #返回模块的搜索路径,初始化时使用的是python环境变量值
sys.exit(n)#退出程序,正常退出时exit(0)
sys.platform #返回操作系统平台的名称
sys.argv#命令行参数list,第一个元素是程序本身路径
command=sys.argv[1]
path=sys.argv[2]
if command=='post':
pass
elif command=='get':
pass
sys.stdout.write('#') #向屏幕显示内容
#进度条
for i in range(10):
sys.stdout.write('#')
time.sleep(0.1)
sys.stdout.flush() #刷新
json模块
dic='{'name':'alex'}'
f=open('hello','w')
f.write()
f_read=open('hello','r')
data=f_read.read()
print(data)
eval(data)
import json
dic={"name":"alex"}
i=1
s='hello'
l=[11,22]
f=open('new_hello','w')
dic_str=json.dumps(dic) #字符串里面必须双引号 变成json字符串
print(dic_str,type(dic_str))
f.write(dic_str)
json.dump(dic_str,f) #代替了上面三句中的一三两句
f_read=open('new_hello','r')
data=json.loads(f_read.read()) #data=json.load(f_read)
print(data) #输出是字典
新建json_test文档
{"name":"alvin"} #不能是单引号
import json
with open('json_test','r') as f:
data=f.read()
print(type(data))
data=json.loads(data)
print(data['name'])
#pickle模块 #支持的类型多
import pickle模块
dic={'name':'alvin','age':23,'sex':'male'}
print(type(dic))
j=pickle.dumps(dic) #字节
f=open('序列化对象_pickle','wb')
f.write(j)
import pickle
f=open('序列化对象_pickle','rb')
data=pickle.loads(f.read())
print(data['age'])
#shelve模块
shelve模块比pickle模块简单,只有一个open函数,返回值类似字典的对象。可读可写:key必须为字符串,二值可以是
python所支持的数据类型
import shelve
f=shelve.open(r'shelvel.txt') #目的:将一个字典放入文本
f['stu1_info']={'name':'alex','age':'18'}
f['stu2_info']={'name':'alvin','age':'20'}
f['school_info']={'website':'oldboyedu.com','city':'beijing'}
f.close()
f=shelve.open(r'shelvel.txt')
print(f.get('stu1_info')['age'])
f.close()
#xml模块
xml是实现不同语言和程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单
data
country
rank
year
country
rank
year
country
rank
year
import xml.etree.ElementTree as ET #简写
tree=ET.parse('xmltest_lesson')
root=tree.getroot()
print(root.tag)
for i in root:
print(i.tag) #标签名字
print(i.attrib) #属性
for j in i:
print(j.tag)
print(j.attrib)
print(j.text) #标签文本内容
for node in root.iter('year'): #遍历所有的year
print(node.tag.node.text)
#修改
import xml.etree.ElementTree as ET
tree=ET.parse('xmltest_lesson')
root=tree.getroot()
tree.write('abc.xml')
for node in root.iter('year'):
new_year=int(node.text)+1 #改文本
node.text=str(new_year)
node.set('updated','yes') #改属性
#删除node
for country in root.findall('country'): #找多个
rank=int(country.find('rank').text)
if rank>50:
root.remove(country)
tree.write('output.xml')
#创建一个xml
new_xml=ET.Element('namelist') #根节点标签
name=ET.SubElement(new_xml,'name',attrib={'enrolled':'yes'})
age=ET.SubElement(name,'age',attrib={'checked':'no'})
sex=ET.SubElement(name,'sex')
sex.text='19'
name2=ET.SubElement(new_xml,'name',attrib={'enrolled':'no'})
age=ET.SubElement(name2,'age')
age='19'
et=ET.ElementTree(new_xml) #生成文档对象
et.write('test.xml',encoding='utf-8',xml_declaration=True)
#re模块
就其本质而言,正则表达式(或re)是一种小型的,高度专业化的编程语言,在(python中),它内嵌在python中,
并通过re模块实现,正则表达式模式被编译成一系列的字节编码,然后由用c编写的匹配引擎执行
字符串内置方法都是完全匹配
模糊匹配
元字符: . ^ $ * + ? {} [] | ()
. 除了
其他的字符都能匹配上 通配符
re.findall('alex','hjaksdfhalrex')
re.findall('a..x','hjaksdfhalexlg')
re.findall('^a..x','hjaksdfhalexlg') #在字符串的开头匹配
re.findall('a..x$','hjaksdfhalexlg') #在字符串的结尾匹配
re.findall('d*','hjdaksdddddfhalexlg') #紧挨着的字符重复 不管次数
#['', '', 'd', '', '', '', 'ddddd', '', '', '', '', '', '', '', '', '']
re.findall('^d*','dddlksdfgj')
re.findall('d+','hjdaksdddddfhalexlg') #1到无穷次 ['d', 'ddddd']
re.findall('d?','hjdaksdddddfhalexlg')#0到1次数
{} {0,}==*
{1,}==+
{0,1}==?
{6} #重复6次
{1,6}#重复1到6次
re.findall('alex{0,6}','hjdaksdddddfhalexlg')
前面的* + ?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
[]字符集 []里面无特殊符号除了4个
re.findall('www.[oldboy baidu]','www.baidu') #或
re.findall('x[y z]p','xypuuxzpux') #['xyp', 'xzp']
re.findall('x[yz]p','xypuuxzpux') #['xyp', 'xzp']
re.findall('q[a*z]','ksadfkqaa')
re.findall('q[a-z]','qu') #[a-z]#表示a到z
re.findall('q[^a-z]','q899uogjgkjjhkq9') ^非 不是a到z
re.findall('([^()]*)','12+(34*6+2-5*(2-1))') #( 表示普通括号
特殊的 - ^
反斜杠后面跟元字符取出特殊功能如.
反斜杠后面跟普通字符实现特殊功能如d
d [0-9]
D 非数字部分
S 匹配任何空白字符
S 匹配非空白字符
w 匹配任何字母数字字符
W 匹配任何非字母数字字符
匹配一个特殊字符边界
2018-08-27