【十六】Python全栈之路--os

【十六】Python全栈之路--os,第1张

【十六】Python全栈之路--os

文章目录
    • 1. os模块
    • 2. os_shutil
    • 3. os_path
    • 4. tarfile压缩模块
    • 5. 小练习

1. os模块
# ### os 模块
import os

#system()  在python中执行系统命令
os.system("ifconfig")  # linux
# os.system("ipconfig") windows
# os.system("rm -rf ceshi.txt")

#popen()   执行系统命令返回对象,通过read方法读出字符串
"""
obj = os.popen("ipconfig")
print(obj)
print(obj.read())
"""

#listdir() 获取指定文件夹中所有内容的名称列表 ***
lst = os.listdir()
print(lst)

#getcwd()  获取当前文件所在的默认路径 ***
"""/mnt/hgfs/python32_gx/day16"""
# 路径
res = os.getcwd()
print(res)

# 路径 + 文件名 ***
print(__file__)


#chdir()   修改当前文件工作的默认路径
os.chdir("/home/wangwen/mywork")
os.system("touch 2.txt")

#environ   获取或修改环境变量
"""
[windows]
(1)右键qq属性找路径
(2)右键我的电脑属性->高级系统设置->环境变量->path 打开环境变量添加对应路径
(3)cmd => QQScLauncher

[linux]
(1)在家目录中创建个文件夹,里面创建个文件wangwen,写入ifconfig
(2)增加wangwen的可执行权限 chmod 777 wangwen 测试一下 sudo ./wangwen
(3)添加环境变量在os.environ["PATH"] 中拼接wangwen所有的绝对路径
(4)os.system("wangwen")

总结: 环境变量path的好处是,让系统自动的找到该命令的实际路径进行执行;
"""
print(os.environ["PATH"])
"""
environ(
{
'PATH': '/home/wangwen/bin:/home/wangwen/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 
'XAUTHORITY': '/home/wangwen/.Xauthority', 
'XMODIFIERS': '@im=fcitx', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 
'GDMSESSION': 'ubuntu', 'MANDATORY_PATH': '/usr/share/gconf/ubuntu.mandatory.path', 'GTK_IM_MODULE': 'fcitx', 
'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-5JjXbZOpKC', 'DEFAULTS_PATH': '/usr/share/gconf/ubuntu.default.path', 
'XDG_CURRENT_DESKTOP': 'Unity', 'UPSTART_SESSION': 'unix:abstract=/com/ubuntu/upstart-session/1000/1603', 'QT4_IM_MODULE': 'fcitx', 
'QT_LINUX_ACCESSIBILITY_ALWAYS_ON': '1', 'LOGNAME': 'wangwen', 'JOB': 'unity-settings-daemon', 'PWD': '/mnt/hgfs/python32_gx/day16', 
'IM_CONFIG_PHASE': '1', 'PYCHARM_HOSTED': '1', 'LANGUAGE': 'zh_CN:zh', 'PYTHONPATH': '/home/wangwen/pylianxi', 'SHELL': '/bin/bash', 'GIO_LAUNCHED_DESKTOP_FILE': '/home/wangwen/.local/share/applications/jetbrains-pycharm-ce.desktop', 'INSTANCE': '', 'GTK2_MODULES': 'overlay-scrollbar', 'UPSTART_INSTANCE': '', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'GTK_MODULES': 'gail:atk-bridge:unity-gtk-module', 'CLUTTER_IM_MODULE': 'xim', 
'XDG_SESSION_PATH': '/org/freedesktop/DisplayManager/Session0', 
'COMPIZ_BIN_PATH': '/usr/bin/', 'SESSIONTYPE': 'gnome-session', 'XDG_SESSION_DESKTOP': 'ubuntu', 'SHLVL': '0', 
'COMPIZ_CONFIG_PROFILE': 'ubuntu', 'UPSTART_JOB': 'unity7', 'QT_IM_MODULE': 'fcitx', 
'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg', 'GNOME_KEYRING_CONTROL': '', 'LANG': 'zh_CN.UTF-8', 'XDG_SEAT_PATH': '/org/freedesktop/DisplayManager/Seat0', 'XDG_SESSION_TYPE': 'x11', 'XDG_SESSION_ID': 'c2', 'DISPLAY': ':0', 'GDM_LANG': 'zh_CN', 'PYTHONIOENCODING': 'UTF-8', 'XDG_GREETER_DATA_DIR': '/var/lib/lightdm-data/wangwen', 
'UPSTART_EVENTS': 'xsession started', 'SESSION': 'ubuntu', 'GPG_AGENT_INFO': '/home/wangwen/.gnupg/S.gpg-agent:0:1', 'DESKTOP_SESSION': 'ubuntu', 'USER': 'wangwen', 'GIO_LAUNCHED_DESKTOP_FILE_PID': '12487', 'QT_ACCESSIBILITY': '1', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'XDG_SEAT': 'seat0', 'PYTHONUNBUFFERED': '1', 'QT_QPA_PLATFORMTHEME': 'appmenu-qt5', 'XDG_RUNTIME_DIR': '/run/user/1000', 'XDG_VTNR': '7', 'HOME': '/home/wangwen', 'GNOME_KEYRING_PID': ''
}
)
"""
os.environ["PATH"] += ":/home/wangwen/mywork"
os.system("wangwen")



#--os 模块属性
#name 获取系统标识   linux,mac ->posix      windows -> nt
print(os.name)
#sep 获取路径分割符号  linux,mac -> /       window->  ***
print(os.sep)
#linesep 获取系统的换行符号  linux,mac -> n    window->rn 或 n
print(repr(os.linesep))

2. os_shutil
# ### os 模块 (文件 *** 作) 新建/删除/ 
import os
os.chdir("/home/wangwen/mywork")
# -- os模块具有 新建/删除/
#os.mknod   创建文件
# os.mknod("1.txt")

#os.remove  删除文件
# os.remove("1.txt")

#os.mkdir   创建目录(文件夹)
# os.mkdir("ceshi111")

#os.rmdir   删除目录(文件夹)
# os.rmdir("ceshi111")

#os.rename  对文件,目录重命名
# os.rename("2.txt","3.txt")

#os.makedirs   递归创建文件夹
# os.makedirs("a/b/c/d/e/f")

#os.removedirs 递归删除文件夹(空文件夹)
# os.removedirs("a/b/c/d/e/f")

# ### shutil模块 复制/移动/
import shutil
#copyfileobj(fsrc, fdst[, length=16*1024])  复制文件 (length的单位是字符(表达一次读多少字符/字节))
"""
fp_src = open("3.txt",mode="r",encoding="utf-8")
fp_dst = open("4.txt",mode="w",encoding="utf-8")
shutil.copyfileobj(fp_src,fp_dst)
"""
#copyfile(src,dst)   #单纯的仅复制文件内容 , 底层调用了 copyfileobj
# shutil.copyfile("4.txt","5.txt")

#copymode(src,dst)   #单纯的仅复制文件权限 , 不包括内容  (虚拟机共享目录都是默认777)
"""注意: 要先有两个文件才可以,不会默认创建"""
shutil.copymode("4.txt","5.txt")

#copystat(src,dst)   #复制所有状态信息,包括权限,组,用户,修改时间等,不包括内容
shutil.copystat("4.txt","5.txt")

#copy(src,dst)       #复制文件权限和内容
shutil.copy("5.txt","6.py")

#copy2(src,dst)      #复制文件权限和内容,还包括权限,组,用户,时间等
shutil.copy2("5.txt","7.py")

#copytree(src,dst)   #拷贝文件夹里所有内容(递归拷贝)
# shutil.copytree("lianxi","lianxi2")

#rmtree(path)        #删除当前文件夹及其中所有内容(递归删除)
# shutil.rmtree("lianxi2")

#move(path1,paht2)   #移动文件或者文件夹
# shutil.move("7.py","lianxi/888.php")
shutil.move("7.py","/888.php")

3. os_path
# ### os.path 路径模块
import os

pathvar = "/home/wangwen/mywork/ceshi.py"
pathvar = __file__
#basename() 返回文件名部分
res = os.path.basename(pathvar)
print(res)

#dirname()  返回路径部分
res = os.path.dirname(pathvar)
print(res)

#split() 将路径拆分成单独的文件部分和路径部分 组合成一个元组
print(os.path.split(__file__))

#join()  将多个路径和文件组成新的路径 可以自动通过不同的系统加不同的斜杠  linux / windows ***
path1 = "home"
path2 = "wangwen"
path3 = "mywork"
pathvar = path1 + os.sep + path2 + os.sep + path3
print(pathvar)

# 用join改造
path_new = os.path.join(path1,path2,path3)
print(path_new)

#splitext() 将路径分割为后缀和其他部分 (了解)
pathvar = "/home/wangwen/mywork/ceshi.py"
print(  os.path.splitext(pathvar)  )
print(  pathvar.split(".")[-1]  )

#getsize()  获取文件的大小  ***
# pathvar = os.path.dirname(__file__) # 方法一
pathvar = os.getcwd() # 方法二
path_new = os.path.join(pathvar,"2.py")
print(path_new)
# 计算文件大小
res = os.path.getsize(path_new)
print(pathvar)
res = os.path.getsize("/mnt/hgfs/python32_gx/day14")
print(res)


#isdir()    检测路径是否是一个文件夹  ***
res = os.path.isdir("/mnt/hgfs/python32_gx/day14")
print(res)
#isfile()   检测路径是否是一个文件    ***
res = os.path.isfile("/mnt/hgfs/python32_gx/day16/1.py")
print(res)
#islink()   检测路径数否是一个链接
res = os.path.islink("/home/wangwen/mywork/1122.py")
print(res)


#getctime() [windows]文件的创建时间,[linux]权限的改动时间(返回时间戳)
import time
res = os.path.getctime("/home/wangwen/mywork/4.txt")

#getmtime() 获取文件最后一次修改时间(返回时间戳)
res = os.path.getmtime("/home/wangwen/mywork/4.txt")

#getatime() 获取文件最后一次访问时间(返回时间戳)
res = os.path.getatime("/home/wangwen/mywork/4.txt")
print(res)
print(time.ctime(res))

#exists()   检测指定的路径是否存在 ***
res = os.path.exists("/home/wangwen/mywork/4.txt")
# res = os.path.exists("4.txt")
print(res,"<============>")

#isabs()    检测一个路径是否是绝对路径
res = os.path.isabs("2.py")
print(res)
#abspath()  将相对路径转化为绝对路径
res = os.path.abspath("2.py")
print(res)

pathvar = "2.py"
if not os.path.isabs(pathvar):
	abs_path = os.path.abspath("2.py")
print(abs_path)

# ### 作业题 : 计算一个文件夹中的所有文件大小

4. tarfile压缩模块
# ### tarfile 压缩模块
import tarfile
# (1) 压缩文件

# 1.只是单纯的打包.
# 创建压缩包
tf = tarfile.open("ceshi0930_0.tar","w",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 378880

# 2.使用gz算法压缩
tf = tarfile.open("ceshi0930_1.tar.gz","w:gz",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 180413

# 3.使用bz2算法压缩
tf = tarfile.open("ceshi0930_2.tar.bz2","w:bz2",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 163261


# (2) 解压文件
tf = tarfile.open("ceshi0930_1.tar.gz","r",encoding="utf-8")
""" extract(文件,路径) 解压单个文件"""
tf.extract("chown","ceshi0930_1")
""" extract(路径) 解压所有文件"""
tf.extractall("ceshi0930_1_2")
tf.close()

# (3) 追加文件
"""对已经压缩过的包无法进行追加文件,只能是没有压缩过的包进行追加文件"""
tf = tarfile.open("ceshi0930_0.tar","a",encoding="utf-8")
tf.add("/bin/mkdir","mkdir")
tf.close()

# 使用with进行改造
with tarfile.open("ceshi0930_0.tar","a",encoding="utf-8") as tf:
	tf.add("/bin/mkdir","mkdir234")

# (4) 查看文件
with tarfile.open("ceshi0930_0.tar","r",encoding="utf-8") as tf:
	lst = tf.getnames()
	print(lst)



# ### 追加文件到压缩包中在压缩
import os,shutil
"""
1.把已经压缩的包进行解压
2.把要追加的内容放进去
3.过滤文件重新压缩
"""
# 记录压缩包所在的绝对路径
pathvar1 = os.path.abspath("ceshi0930_2.tar.bz2")
# 要解压到哪个文件夹中(绝对路径)
pathvar2 = os.path.join(  os.getcwd() , "ceshi0930_2"  )
print(pathvar1)# /mnt/hgfs/python32_gx/day16/ceshi0930_2.tar.bz2
print(pathvar2)# /mnt/hgfs/python32_gx/day16/ceshi0930_2

# 1.把已经压缩的包进行解压
with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
	tf.extractall(pathvar2)

# 2.把要追加的内容放进去
shutil.copy("/bin/echo" , pathvar2)

# 3.过滤文件重新压缩

# 查看文件夹当中有什么文件
lst = os.listdir(pathvar2)
print(lst) # ['chown', 'cp', 'echo', 'tmp']

with tarfile.open(pathvar1,"w:bz2",encoding="utf-8") as tf:
	for i in lst:
		if i != "chown":
			# 拼凑成完整的绝对路径
			abs_path = os.path.join(pathvar2,i)
			# 剩下的都要压缩
			"""add(路径,别名)"""
			tf.add(abs_path,i)
"""
	/mnt/hgfs/python32_gx/day16/ceshi0930_2/chown
	/mnt/hgfs/python32_gx/day16/ceshi0930_2/cp
	/mnt/hgfs/python32_gx/day16/ceshi0930_2/echo	
	tf.add("/bin/chown","chown")
"""

小提示:

在压缩文件的时候,路劲写全路径的话前面要加r,repr,让n特殊符号失效
想要输出%   输入%%-->%

system()不能自动转换字符集,在linux中显示正常,在windows会乱码
popen()可以自动转换字符集

os.path.sdfsd 
os相当于文件夹,文件夹里有个path的模块(文件),文件里有一堆函数


5. 小练习
 os_path小练习: 计算一个文件夹中的所有文件大小
# ### 1.注册登录小程序
# 注册:
(1)检测两次密码如果相同,确认注册成功
(2)检测两次密码如果不同,提示两次密码不一致
(3)用户名不能重复

# 登录:
(1)输入账号密码:如果都正确,登录成功
(2)如果用户登录时进行三次校验,都不对,记录黑名单文件中
(3)如果是黑名单的用户,禁止下次再次登录


# ### 2.购物车小程序

# 1. 用户先给自己的账户充钱:比如先充3000元。
# 2. 页面显示 序号 + 名称 + 价格 , 如:
# [===========有如下商品供您选择:===========]
# 序号     名称       价格
# 1 		 电脑		1999
# 2 		 鼠标		10
# 3 		 游艇		20
# 4 		 美女		998
# n或N	购物车结算
# q或Q	退出程序(如不结算购物车可直接退出)]
# [==========================================]
# 购物车结算
# 3. 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
# 4. 如果用户输入的商品序号有误,则提示输入有误,并重新输入。
# 5. (1)用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价
#    (2)若充值的钱数不足则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买退出
#    (3)退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少
# 6. 用户输入Q或者q 直接退出程序。



shopping_data.json文件
	{"name":"电脑","price":1999}
	{"name":"鼠标","price":10}
	{"name":"游艇","price":20}
	{"name":"美女","price":998}
	{"name":"风油精","price":30}
	
	

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5480016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存