Python之旅的第15天(osjsonsys模块,模块引入补充)
Posted 崆峒山肖大侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之旅的第15天(osjsonsys模块,模块引入补充)相关的知识,希望对你有一定的参考价值。
今天内容不多,所以都进行了测试
一、bin.py文件也存在与子目录之下,如何通过bin.py文件转入main.py
文件存储的大致位置:
main.py文件存放内容
from ceshi1 import add def run(): print(\'main def start\') print(add.ad(2,3)) return \'main def start\'
add.py文件存放内容
def add(x,y): return x+y
bin.py文件内容和总结
# 关于昨天讲到的bin.py文件放在ceshi(package)下,与ceshi1(package)放在同一子目录下的情况进行了补充 # 大部分时候bin.py文件也会放在一个package下面,作为其中的一个文件,此时bin.py和main.py文件分别属于不同的文件夹 # 此时应该如何实践import导入,最终正常执行main.py文件 #之前的方法是 # from ceshi.ceshi1 import main #此时因为bin.py文件所在的路径已经不和ceshi1属于同一子目录,所以无法实现引入 import sys,os # print(sys) #此时显示文件的路径是C:/Users/xiaoyao28.CRHD0A/PycharmProjects/python_s1/venv/模块和包/ceshi/bin/bin.py #但是这是pycharm修改后的结果,在终端运行的过程中往往只显示bin.py文件 #此时我们知道了bin.py 的默认执行路径,我们可以跟怒sys内置的方法进行修改其默认路劲,再进行相关引入即可 # sys.path.append(r\'C:/Users/xiaoyao28.CRHD0A/PycharmProjects/python_s1/venv/模块和包/ceshi\') #此时已经修改默认路径为ceshi(package)所在目录,再进行from导入,查看是否可以运行 # from ceshi1 import main # main.run() #此时文件可以正常运行,但是这样得到的固定文件路径,一旦更换运行设备就没法正常运行了 #所以需要引入os模块中的一些功能 #os.path.dirname 获得文件路径的上一层路径 #但是我们在前面也提到__file__获得的只是bin.py,而前面的路径是pycharm加上的 #os.path.abspath(__file__) 获得文件的绝对路径,即前面那一堆加上了 # bas = os.path.abspath(__file__) #获取当前执行的bin.py文件所在绝对路径 # bas_up = os.path.dirname(os.path.dirname(bas)) #这样通过两次返回上一层,就获得了正确的默认测试路径 # #即为C:/Users/xiaoyao28.CRHD0A/PycharmProjects/python_s1/venv/模块和包/ceshi # sys.path.append(bas_up) #以bas_up变量为参数,临时修改默认路径 # from ceshi1 import main # main.run() #可正常运行,就算更换设备也不影响正常使用
二、os模块
import os #os模块内容 #os.getcwd 获取当前工作目录,即为上一级的绝对路径 # print(os.getcwd()) #输出结果:C:\\Users\\xiaoyao28.CRHD0A\\PycharmProjects\\python_s1\\venv\\day22 #os.chdir(\'path\') 改变当前工作目录,输入path为要切换的文件名,如果输入\'..\'表示返回上一级 # os.chdir(\'..\') # print(os.getcwd()) #os.makedirs(\'dirname/dirname\') 生成多层递归目录 # os.makedirs(\'dirname/dirname1\') #os.removedirs(\'path\') 删除该文件目录,若该文件目录为空,则删除,同时递归至上一层文件目录,若为空则删除,以此类推 # os.removedirs(\'dirname/dirname1\') #os.mkdir(\'dirmame\') 生成单级目录 # os.mkdir(\'dirname\') #os.rmdir(\'dirname\') 删除单级目录,若该单级目录不为空则无法删除,系统会报错 # os.rmdir(\'dirname\') #os.listdir(\'dirname\') 列出制定目录下的所有文件和子目录,包含隐藏文件,并以列表方式打印 # print(os.listdir()) #输出:[\'os_test.py\', \'__init__.py\'] #os.remove(\'path\') 制定删除一个文件 #os.rename(\'oldname\',\'newname\') 重新命名文件或目录 #os.stat(\'dirname\') 获取文件的相关状态,访问时间、修改时间、大小等 # os.chdir(\'..\') # print(os.stat(\'ceshi\')) #输出os.stat_result(st_mode=33206, st_ino=3377699720828849, st_dev=4176561250, st_nlink=1, # st_uid=0, st_gid=0, st_size=1077, st_atime=1583500656, st_mtime=1583506954, st_ctime=1583500638) # atime上次访问时间 mtime最新修改时间 ctime文件创建时间 #os.sep(\'path/filename\') 获取文件/目录的信息 # print(os.sep) #不同操作系统输出不同斜线 # os.linesep 输出当前平台使用的行终止符 # os.pathsep 输出当前平台文件路径字符串的分隔符 win是\';\' linux是\':\' # os.name 输出当前运行的平台,用于跨平台运行的选择 # os.system(\'dir\') 运行shell命令,直接显示(这个还不是很清晰) # os.path.split(\'path\') 将path分割成目录和文件名二元组返回 # os.path.dirname(\'path\') 返回path的目录名 # os.path.basename(\'path\') 返回path的文件名 # print(os.path.split(__file__)) #输出结果:(\'C:/Users/xiaoyao28.CRHD0A/PycharmProjects/python_s1/venv/day22\', \'os_test.py\') # print(os.path.dirname(__file__)) #输出结果就是split输出元组的前半部分,C:/Users/xiaoyao28.CRHD0A/PycharmProjects/python_s1/venv/day22 # print(os.path.basename(__file__)) #输出结果就是split输出元组的后半部分,os_test.py # os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False # os.chdir(\'..\') # print(os._exists(\'day22\')) # os.path.isabs(path) 如果path是绝对路径,返回True # b = os.path.abspath(__file__) # print(os.path.isabs(b)) # os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False # print(os.path.isfile(\'os_test.py\')) # os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False # os.chdir(\'..\') # print(os.path.isdir(\'day22\')) # os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 # print(os.path.abspath(__file__)) #C:\\Users\\xiaoyao28.CRHD0A\\PycharmProjects\\python_s1\\venv\\day22\\os_test.py # a = \'C:\\ooyao28.CRHD0A\\PycharmProjects\' # b = \'python_s1\\venv\\day22\\os_test.py\' # print(os.path.join(a,b)) #用join拼接的字符串可以适应各种操作系统 # os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 # os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 # 相当于直接获取os.stat中的部分内容 # os.environ 获取系统环境变量 # print(os.environ)
三、sys模块
import sys,time # sys模块部分内容比较少 # sys.argv 命令行参数List,第一个元素是程序本身路径 # 我们在制作或者执行文件时,中间会让程序停下来进行input()操作,而使用sys.argv则可在程序运行开始就传输相关参数 # sys.exit(n) 退出程序,正常退出时exit(0) # sys.version 获取Python解释程序的版本信息 # sys.maxint 最大的Int值 # sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 # sys.platform 返回操作系统平台名称 # sys.stdout.write() 类似于输出语句,可用于制作进度条 # for i in range(50): # sys.stdout.write(\'_\') # time.sleep(0.2) # sys.stdout.flush() #增加此句的功能是为了让一旦有输出语句就可以立即刷新 # #以前都是等整个for循环完成后统一一块输出,这样可以做成类似进度条
四、json&pickle模块
import json,pickle #json是可以将数据转换为json类型的字符串,可用于任何语言的传输 #下面以文件写入字典为例介绍一下json #需求:信件文件test,吸入字典{\'name\':\'alex\',\'age\':18},保证可被读取 #之前都是用的eval # dic = {\'name\':\'alex\',\'age\':18} # # f = open(\'json_test\',\'w\') # dic = str(dic) # f.write(dic) # f.close() # # f_read = open(\'json_test\',\'r\') # a = eval(f_read.read()) # print(a[\'name\']) #但是在实际操作过程中eval也存在有局限性,不能保存函数,以及不能被其他语言识别等 #引入json #json.dumps() 将数据转换为json类型的字符串 #json.loads() 读取json类型字符串,将其转化回来 # dic = {\'name\':\'alex\',\'age\':18} # f = open(\'json_test\',\'w\') # dic = json.dumps(dic) # print(dic) #此处输出结果:{"name": "alex", "age": 18} # #在json.dumps的过程中,首先是把dic内的所有单引号变为双引号,同时在外部加入引号,保证成为标准json字符串类型 # print(type(dic),dic) #输出结果:<class \'str\'> {"age": 18, "name": "alex"} # f.write(dic) #关于dumps的用法,直接书写为json.dump(dic,f) # json.dump(dic,f) #这一句等同于dic = json.dumps(dic) f.write(dic) #为了便于记录,还是不要这么偷懒 #json.load 和 json.loads的区别也是一样的 # f.close() # # f_read = open(\'json_test\',\'r\') # a = json.loads(f_read.read()) #json.loads使用的前提是对应的值必须是一个标准的json类型字符串 #如果我们自己书写的字符串,必须满足双引号的要求才能转换 # print(a[\'name\']) # 关于pickle的作用,本质上和json相同,但是pickle是用于python之间的数据交换,能够转换的范围更大 # # pickle是将给的数据类型转换为字节的形式储存 # dic = {\'name\':\'alex\',\'age\':18} # f = open(\'json_test\',\'wb\') # dic = pickle.dumps(dic) # print(dic) #输出结果是:b\'\\x80\\x03}q\\x00(X\\x04\\x00\\x00\\x00nameq\\x01X\\x04\\x00\\x00\\x00alexq\\x02X\\x03\\x00\\x00\\x00ageq\\x03K\\x12u.\' # print(type(dic),dic) #输出结果是:<class \'bytes\'> b\'\\x80\\x03}q\\x00(X\\x03\\x00\\x00\\x00ageq\\x01K\\x12X\\x04\\x00\\x00\\x00nameq\\x02X\\x04\\x00\\x00\\x00alexq\\x03u.\' # #pickle将对应数据转换为了字节形式储存写入和读取 # f.write(dic) # f.close() # # f_read = open(\'json_test\',\'rb\') # a = pickle.loads(f_read.read()) # print(a[\'name\']) #可正常得到\'alex\'
后面我会把自己的进度放的慢一些,因为感觉内容真的越来越多,主要还是需要更多的练习,今天的内容就是这些啦。
以上是关于Python之旅的第15天(osjsonsys模块,模块引入补充)的主要内容,如果未能解决你的问题,请参考以下文章