Pyhton学习——Day22

喜你入骨 提交于 2020-02-09 01:03:33
#有缩进的代码表示局部作用域的代码#if_name_ =='_main_'    # while True#先引入一个os模块import os,sys,time,json# print(os.path.dirname())#BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_)))# sys.path.append(BASE_DIR)   不写死找到相对路径################################################################################################################## print(os.getcwd())# 获取当前工作目录,即当前python脚本工作的目录路径-->F:\Python_Leaning\每日学习打卡# os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径# os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd# os.curdir  返回当前目录: ('.')# os.pardir  获取当前目录的父目录字符串名:('..')# os.makedirs('dirname1/dirname2')    可生成多层递归目录# os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,# 依此类推,如果不是空文件则不给删除# os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname# os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname# os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印# os.remove()  删除一个文件# os.rename("oldname","newname")  重命名文件/目录# os.stat('path/filename')  获取文件/目录信息# os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"# os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"# os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:# os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'# os.system("bash command")  运行shell命令,直接显示# os.environ  获取系统环境变量# os.path.abspath(path)  返回path规范化的绝对路径# os.path.split(path)  将path分割成目录和文件名二元组返回# res = os.path.split('F:\Python_Leaning\venv\Scripts\python.exe F:/Python_Leaning/每日学习打卡/Day22.py')# print(res)# ('F:\\Python_Leaning\x0benv\\Scripts\\python.exe F:/Python_Leaning/每日学习打卡', 'Day22.py')############################################################################################################# os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素# os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素# os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False# os.path.isabs(path)  如果path是绝对路径,返回True# os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False# os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False# os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略#join是将路径进行拼接,最常用的方法# os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间# os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间################################################################################################################### SYS模块# sys.argv           命令行参数List,第一个元素是程序本身路径# sys.exit(n)        退出程序,正常退出时exit(0)# sys.version        获取Python解释程序的版本信息# sys.maxint         最大的Int值# sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值# sys.platform       返回操作系统平台名称####################################################################################################################### 进度条# for i in range(10):#     sys.stdout.write('#')#     time.sleep(1)#     sys.stdout.flush()# print(sys.argv)########################################################################################################################json模块用于数据交换,json可以进行任何语言的数据交换# dic = {'name':'alex'}# data = json.dumps(dic)# print(data)# print(type(data))       #json字符串一定是双引号# f = open("json_test","r")# data = f.read()# print(data)# print(type(data))# data1 = json.loads(data)# print(data1["name"])# f.close()# {"name":"alex"}# <class 'str'># alex######################################################################################################################### 什么是序列化?# 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,# 在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。# 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。# 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。# # ----------------------------序列化# import pickle# dic = {'name': 'alvin', 'age': 23, 'sex': 'male'}# print(type(dic))  # <class 'dict'># j = pickle.dumps(dic)# print(type(j))  # <class 'bytes'># f = open('序列化对象_pickle', 'wb')  # 注意是w是写入str,wb是写入bytes,j是'bytes'# f.write(j)  # -------------------等价于pickle.dump(dic,f)# f.close()# # -------------------------反序列化# import pickle# f = open('序列化对象_pickle', 'rb')# data = pickle.loads(f.read())  # 等价于data=pickle.load(f)# print(data['age'])# Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,# 并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。######################################################################################################################## import shelve# f = shelve.open(r'shelve.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()# print(f.get('stu_info')['age'])# shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,# 而值可以是python所支持的数据类型########################################################################################################################XMl是等同于现在的json的数据处理交换文件,但是由于时间使用长,所以xml需要了解,xml使用的是标签语言,所有的语法都是标签实现的#xml需要对数据进行解析import xml.etree.cElementTree as ET #简写# tree = ET.parse("F:/Python_Leaning/测试专用文件夹/xmltest")# root = tree.getroot()   #找到根节点————>root# print(root.tag)        # tag就是标签的名字#遍历文档内容# for child in root:    # print(child.tag,child.attrib)    # for i in child:        # print(i.text)#______________________________________________________________##只遍历year节点# for node in root.iter('gdppc'):#     print(node.tag,node.text)#_______修改_________________________________________________________## for node in root.iter('year'):#     new_year = int(node.text)+1#     node.text = str(new_year)#     node.set('updated','yes')# tree.write('xmltest.xml')#_____删除_______________________________________________________________## for country in root.findall('country'):#     rank = int(country.find('rank').text)#     if rank >50:#         root.remove(country)# tree.write('xmltest.xml')#__________________________________________________________________________##创建xml数据# new_xml = ET.Element('namelist')# name = ET.SubElement(new_xml,'name',attrib = {'enrolled':'yes'})# age = ET.SubElement(name,'age',attrib = {'checked':'no'})# et = ET.ElementTree(new_xml)    #生成文档树# et.write('test.xml',encoding='UTF-8',xml_declaration=True)#——————————————————————————————————————##正则表达式:对字符串进行处理# 就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,# (在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,# 然后由用 C 编写的匹配引擎执行。# 字符匹配(普通字符,元字符):## 1 普通字符:大多数字符和字母都会和自身匹配#               >>> re.findall('alvin','yuanaleSxalexwupeiqi')#                       ['alvin']## 2 元字符:. ^ $ * + ? { } [ ] | ( ) \    --->>提供了模糊匹配的可能# .通配符:什么都可以代替,数字、字母等,除了_不能替换import re# res = re.findall('^a..x','aappxasdasdiahsoldasidhxaosiduasx')# print(res)#^ 以什么开头,必须在字符串的开头匹配#$ 以什么为结尾,必须在字符串的结尾匹配#* 重复符号,零到无穷个,贪婪匹配,有多少都必须匹配上# res = re.findall('^a*','aaaaaappxasdasdiahsoldasidhxaosiduasx')# print(res)#+ 重复符号,1到无穷个,至少出现一次,贪婪匹配,有多少都必须匹配上# res = re.findall('alex*','aasdleasdasdxxxxxx')# print(res)#? 重复符号,匹配0到1个# res = re.findall('alex?','asdasdaalfalexasdasgaalexasdataalex')# print(res)#{} 范围自己定 {0,}==*    {1,}==+  {0,1}==?#前面的*+?等都是贪婪匹配,后面加?号就是使其变成惰性匹配#[]字符集 代表或的作用,在字符集中不能存在匹配符号,字符集里有功能的符号:-至 ^非 \# res = re.findall('w[a-z]*','wwwbaidu')# print(res)# res = re.findall('\([^()]*\)','12+(34*6+2-5*(2-1))')# print(res)#\ 转译符# 元字符之转义符\# 反斜杠后边跟元字符去除特殊功能,比如\.# 反斜杠后边跟普通字符实现特殊功能,比如\d# \d  匹配任何十进制数;它相当于类 [0-9]。# \D 匹配任何非数字字符;它相当于类 [^0-9]。# \s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。# \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。# \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。# \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]# \b  匹配一个特殊字符边界,比如空格 ,&,#等#()是做分组用的
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!