Python之旅的第15天(os、json、sys模块,模块引入补充)

今天内容不多,所以都进行了测试

一、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'

后面我会把自己的进度放的慢一些,因为感觉内容真的越来越多,主要还是需要更多的练习,今天的内容就是这些啦。

猜你喜欢

转载自www.cnblogs.com/xiaoyaotx/p/12445952.html
今日推荐