python学习篇之【os、sys、json】模块

一、os模块

os模块是与操作系统交互的一个接口

 

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分割成目录和文件名二元组返回

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[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间

os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os模块方法

 

# 1、os.getcwd() 
# 获取当前工作目录,即当前python脚本的工作路径,如linux的pwda = os.getcwd()print(type(a),a)

# 2、os.chdir()
# 改变当前脚本工作目录,相当于shell中的 cd命令
os.chdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础/12、time与random模块')
print(os.getcwd())

# 3、os.curdir 
# 返回当前目录 ('.')
print(os.curdir) 

# 4、os.pardir 
# 获取当前的目录的父目录字符串名('..')
print(os.pardir)

# 5、os.mkdirs() 
# 递归生成多级目录
os.makedirs('file1/file2') 
# 如果已经创建 则会报错

# 6、os.removedirs() 
  # 若目录为空,则删除,并递归到上一级,如若空,也删除,以此类推。

os.removedirs('file1/file2')

# 7、os.mkdir()  
# 生成单级目录 相当于shell中的 mkdir
os.mkdir('wuyu')

# 8、os.rmdir() 
# 删除单级空目录,若目录为空,则删除,不为空则报错
os.rmdir('wuyu')

# 9、os.listdir() 
# 列出指定目录下,所有的文件和子目录,包括隐藏文件。返回一个列表
print(os.listdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础/12、time与random模块'))

# 10、os.remove() 
# 删除一个文件,注意好路径

# 11、os.rename() 
# 文件重命名,参数一,原名称。参数二 修改后的名称

# 12、os.stat() 
# 获取文件/目录信息
print(os.stat('os模块.py'))
# 返回值中主要信息 ,注:返回的为时间戳,需要转换为字符串时间。
# st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
# st_atime: 上次访问的时间。
# st_mtime: 最后一次修改的时间
# st_ctime: Windows系统上是创建时间。Unix 是最新的元数据更改的时间(详细信息参见平台的文档)

13、os.sep 
# 输出操作系统的特定分隔符 windows:'\\' linux:/
print(os.sep)

14、os.linesep() 
# 输出操作系统的行终止符,即回车。win下为/r/n。linux下为/n

15、os.name  
# 输出字符串打印当前使用平台 win—nt、linux—posix
print(os.name)

16、os.system('bash command')
# 运行shell 命令,直接显示
os.system('ipconfig')

17、os.environ 
# 获取系统环境变量
print(os.environ)

--------------------------os.path下的方法(对文件路径进行操作)-------------------------------------
1、os.path.abspath(path) 
# 返回path规范化的绝对路径。
print(os.path.abspath('os模块'))

2、os.path.split(path) 
# 将传入的文件路径 分为 路径 文件 两个元素 放入元组
print(os.path.split('C:/Users/雷姆/13、os、josn、sys等模块/os模块.py'))


3、os.path.dirname(path)  
# 实际上拿到的就是 os.path.split 元组里的第一个元素。
print(os.path.dirname('C:/Users/雷姆/13、os、josn、sys等模块/os模块.py'))


4、os.path.basename(path) 
# 返回path最后的文件名,如果是/ \结尾就会返回空值
print(os.path.basename(' C:/Users/雷姆/PycharmProjects/untitled'))

5、os.path.exists(path) 
# 如果path存在返回True,不存在返回False
print(os.path.exists('E:\PyAnaconda\python.exe'))


6、os.path.isabs(path)
# 判断当前路径是否为绝对路径。是 true 否 false
print(os.path.isabs('13、os、josn、sys等模块/os模块.py'))


7、os.path.isfile(path)
# 如果path 是一个存在的文件,返回True 反之返回False
print(os.path.isfile(''E:\PyAnaconda\python.exe'))
print(os.path.isfile(''E:\PyAnaconda\'))

8、os.path.isdir(path)
# 如果path 是一个目录,返回True,反之返回False
print(os.path.isdir('C:/Users/雷姆/PycharmProjects/untitled/一、python基础'))
print(os.path.isdir('E:\PyAnaconda\python.exe'))


9、os.path.join()
# 拼接路径 详解请见 同级目录下的 os操作实例中 join实例
# 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
path1 = ' C:/Users/雷姆/PycharmProjects'
path2 = 'untitled/一、python基础/13、os、josn、sys等模块'
path3 = 'os操作实例/join实例.py'

print(path1+path2+path3)
print(os.path.join(path1,path2,path3))

10、os.path.getatime()
# 返回最后一次进入此path的时间。
import time
print(os.path.getatime('os模块.py'))
atime = os.path.getatime('os模块.py')
print(time.strftime('%Y-%m-%d-%X',time.localtime(atime)))
11、os.path.getmtime()
# 返回path最后目录或文件最后修改时间
import time
print(os.path.getmtime('os模块.py'))
mtime = os.path.getmtime('os模块.py')
print(time.strftime('%Y-%m-%d-%X',time.localtime(mtime)))
os方法实例

 

 

批量修改后缀名:

os.chdir('G:\嘿嘿嘿\自己改格式') # 使用chdir 进入文件目录
li = os.listdir()   # 拿到所有文件列表,注:如果有多余文件夹,需加判断 os.path.isdir(path)
for old_name in li:
    if old_name.endswith('.vdat'):
    os.rename(old_name,'%s.avi'%(old_name.rstrip('.vdat')))    

join拼接路径:

os.path.join()函数:

连接两个或更多的路径名组件
    1.如果各组件名首字母不包含’/’,则函数会自动加上
    2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
    3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾

Demo1
import os

Path1 = 'home'
Path2 = 'develop'
Path3 = 'code'

Path10 = Path1 + Path2 + Path3
Path20 = os.path.join(Path1,Path2,Path3)
print ('Path10 = ',Path10)
print ('Path20 = ',Path20)

输出:
Path10 = homedevelopcode
Path20 = home\develop\code

--------------------------------------------------------------
Demo2

import os

Path1 = '/home'
Path2 = 'develop'
Path3 = 'code'

Path10 = Path1 + Path2 + Path3
Path20 = os.path.join(Path1,Path2,Path3)
print ('Path10 = ',Path10)
print ('Path20 = ',Path20) 
输出

Path10 = /homedevelopcode
Path20 = /home\develop\code

--------------------------------------------------------------
Demo3
import os

Path1 = 'home'
Path2 = '/develop'
Path3 = 'code'

Path10 = Path1 + Path2 + Path3
Path20 = os.path.join(Path1,Path2,Path3)
print ('Path10 = ',Path10)
print ('Path20 = ',Path20) 

输出

Path10 = home/developcode
Path20 = /develop\code

--------------------------------------------------------------
Demo4
import os

Path1 = 'home'
Path2 = 'develop'
Path3 = '/code'

Path10 = Path1 + Path2 + Path3
Path20 = os.path.join(Path1,Path2,Path3)
print ('Path10 = ',Path10)
print ('Path20 = ',Path20 )

输出

Path10 = homedevelop/code
Path20 = /code


#常用:添加环境变量
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

 

二、sys模块

sys模块提供了一系列有关Python运行环境的变量和函数。

 

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

 

 

三、json&pickle

什么是序列化?

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

json

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

 

1、dumps与loads:处理非文件数据类型

d = {"1": "a",
     "2": "b", }
json_dumps = json.dumps(d) # 序列化:从内存中变成可存储或传输
print(type(json_dumps), json_dumps)

json_loads = json.loads(json_dumps) # 反序列化:把变量内容从序列化的对象重新读到内存里
print(type(json_loads),json_loads)

 

2、dump与load:处理文件数据类型

d = {"1": "a",
     "2": "b", }
with open("a.txt", 'w') as f:
    j_dump = json.dump(d, f)

with open("a.txt") as f:
    j_load = json.load(f)

 3、补充:json不认单引号

import json
#dct="{'1':111}"#json 不认单引号
#dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1}

dct='{"1":"111"}'
print(json.loads(dct))

#conclusion:
#        无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads
View Code

 

pickle

与json类似,只不过序列化出来的是二进制;
d = {"1": "a", "2": "b", } p_dumps = pickle.dumps(d) print(type(p_dumps), p_dumps) p_loads = pickle.loads(p_dumps) print(type(p_loads), p_loads)

补充:Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

posted @ 2022-05-13 15:59  变靓  阅读(98)  评论(0)    收藏  举报