python中os和sys模块的使用

打印 上一主题 下一主题

主题 991|帖子 991|积分 2975

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python内置库os和sys模块非常有效,在对系统或操作系统的操作方面都很有效,比如判断一个文件是否是目次,一个路径是否存在,获取系统的编码等等。
1.os包:os包下可以直接调用的函数
getcwd:  获取当前工作目次路径,无参,返回 字符串
listdir: 获取指定路径下所有的文件和文件夹,参数是path, 返回 列表
makedirs: 创建多级文件夹,如果没有给绝对路径,会创建到当前路径(相对路径),参数是path mode.
示例:
  1. def os_func():
  2.    
  3.     curr_path = os.getcwd()
  4.     print('当前工作路径:', curr_path)
  5.    
  6.     new_path = '%s/test2' % curr_path
  7.     if os.path.exists(new_path):
  8.         print('file with the given path exists.')
  9.     else:
  10.         os.makedirs(new_path)
  11.    
  12.     data = os.listdir(curr_path)
  13.     print(data)
  14.     new_path2 = '%s/test2/abc' % curr_path  # 已存在的文件再新建文件,会报错
  15.     os.makedirs(new_path2)
  16.     # 没有给路径,只给了一个文件/文件夹,就直接在当前路径下新建文件
  17.     os.makedirs('test3')  
  18. 输出:
  19. FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\fang\\PycharmProjects\\pyProj\\basic2/test2/abc'
  20. current path:  C:\Users\fang\PycharmProjects\pyProj\basic2
  21. ['basic_lx.py', 'dt1.txt', 'os_func2.py', 'os_funcs.py', 'tes.txt', 'test11', 'test2', 'time_lx.py', '__init__.py']
复制代码
如上,如果已存在的文件路径,再创建文件,那么会报错’当文件已存在时,无法创建该文件。‘
removedirs: 传参path, 删除给定路径的多级文件夹,
rename(oldname, newname): 重定名文件/文件夹,
rmdir: 只删除空文件夹,传参空目次,如果黑白空,则无法删除
例子:
  1. def os_func2():
  2.    
  3.     if os.path.exists('test2'):
  4.         os.removedirs('test2')
  5.    
  6.     os.rmdir('test3')
  7.     os.rename('test11', 'test1')
  8. 输出:
  9. File "C:\Users\fang\PycharmProjects\pyProj\basic2\os_func2.py", line 37, in os_func2
  10.     os.removedirs('test2')
  11.   File "C:\Users\fang\AppData\Local\Programs\Python\Python310\lib\os.py", line 243, in removedirs
  12.     rmdir(name)
  13. OSError: [WinError 145] 目录不是空的。: 'test2'
复制代码
如上,使用os.removedirs('test2')删除非空文件夹test2时,报错了,从报错信息得知,removedirs()方法最终调用的还是rmdir()方法,以是因为test2非空,以是无法删除。
当使用os.removedirs('test2/ab')时,因为最后一级ab是空文件夹,以是乐成删除掉ab文件夹。
这里要注意的是,os.removedirs(), os.rmdir()都只能删除非空文件夹
另外注意:os.rename('test2/bk', 'test2/bk1') 如许对最低层级的文件重定名也是可以的。当newname和已有的文件重名时,会报错FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test12' -> 'test1'。以是,使用这个方法时,要注意定名的非重复性。
举例:1). 对os.removedirs():当传参带文件的路径时,会报错'NotADirecotryError: 目次名称无效’, 即程序检测到传参最低层级不是一个目次。这时间是不会删除乐成的。os.removedirs()只针对目次的删除,对文件的删除是不凑效的。从报错信息可以看到,它最终调用的还是rmdir(),这个说到底还是针对空目次进行删除。
  1. os.removedirs('test11/abc.py')
  2. 结果:
  3. File "C:\Users\fang\PycharmProjects\pyProj\basic2\os_func2.py", line 148, in os_func4
  4.     os.removedirs('test11/abc.py')
  5.   File "C:\Users\fang\AppData\Local\Programs\Python\Python310\lib\os.py", line 243, in removedirs
  6.     rmdir(name)
  7. NotADirectoryError: [WinError 267] 目录名称无效。: 'test11/abc.py'
复制代码
2). 对于os.rmdir(): 传参是空目次,才会删除乐成。如: os.rmdir('test1/bk') 会把bk目次删除,并不会像os.removedirs()级联删除,把test1也删除掉。这是两者的区别。
2. os.path常用的函数
函数     参数描述例子返回值
existspath文件或路径是否存在       os.path.exists('d:/test1')bool范例
isdirpath是否是目次os.path.isdir('d:/test1')bool范例
isfilepath是否是文件os.path.isfile('d:/test1/ab.py')bool范例
isabspath是否是绝对路径os.path.isabs('test2')bool范例
joinpath, path*路径字符串合并,用\拼接os.path.join('d://','test3')字符串
splitpath以最后一层路径为基准分割os.path.split('d://test1')元组
示例:
  1. def os_path_func():
  2.    
  3.     curr_path = os.getcwd()
  4.     print(os.path.exists(curr_path))
  5.     print(os.path.isabs(curr_path))
  6.     print(os.path.isabs('test2'))
  7.    
  8.     print(os.path.isdir('test2'))
  9.     print(os.path.isfile('test2'))
  10.     new_path = '%s/test4' % curr_path
  11.     if os.path.exists(new_path):
  12.         os.removedirs(new_path)
  13.     os.makedirs(new_path)
  14.    
  15.     new_path2 = os.path.join(curr_path, 'test', 'abc')
  16.     print(new_path2)
  17.    
  18.     file = os.path.split(curr_path)[-1]
  19.     data = os.path.split(curr_path)  # 返回2个元素组成的元组
  20.     print(data)
  21.     print(file)
  22. 输出:
  23. True
  24. False
  25. True
  26. False
  27. C:\Users\fang\PycharmProjects\pyProj\basic2\test\abc
  28. ('C:\\Users\\fang\\PycharmProjects\\pyProj', 'basic2')
  29. basic2
  30.    
复制代码
如上可知,test2文件夹是目次,不是文件,以是os.path.isfile('test2')返回False. 其中os.path.split()是以给定路径最后一级为基准去分割,结果是返回2个元素组成的元组。
注意:os.path.exists()可以传绝对路径,也可以传相对路径。
  1. if os.path.exists('test1'):
  2.     os.rename('test1', 'test11')
  3. 输出:
  4. 结果把test1重命名为test11
复制代码
2. sys模块:常用于操作当前的操作系统/环境
sys中常用的函数:
函数参数描述例子返回值
modulespython启动时加载的模块sys.modules        字典
path返回当前python的环境路径sys.path列表
exitarg,默认为0退出程序sys.exit
getdefaultencoding获取系统编码sys.getdefaultencoding(): 必须加()字符串
platform获取当前系统平台sys.platform字符串
version获取python的版本sys.version字符串
argv*args从程序外部获取参数sys.argv列表
示例:
  1. def sys_func():
  2.    
  3.     m = sys.modules
  4.     print('python启动时加载的模块', m)
  5.    
  6.     path = sys.path
  7.     print('当前python的环境路径', path)
  8.    
  9.     code = sys.getdefaultencoding()
  10.     print('当前系统的编码:', code)
  11.     print('当前系统平台', sys.platform)
  12.     print('当前python的版本', sys.version)
  13. 输出:
复制代码

关于argv, 它可以从程序外部获取参数,我们让它从终端传入参数给程序。
举个例子:                                                                                                                                        
  1. command = sys.argv(1)
  2. if command == 'modules':
  3.     modules = sys.modules
  4.     print('python启动时加载的模块', modules)
  5. elif command == 'path':
  6.     path = sys.path
  7.     print('当前python的环境路径', path)
  8. elif command == 'getdefaultencoding':
  9.     code = sys.getdefaultencoding()
  10.     print('系统编码', code)
  11. elif command == 'platform':
  12.     print('当前系统平台', sys.platform)
  13. elif command == 'version':
  14.     print('当前python的版本', sys.version)
  15. else:
  16.     print('no command')
复制代码
从程序外部获取参数,python os_func2.py path,程序实验返回当前python的环境路径。
可以看到,在终端实验python脚本时传入参数可以被argv接收。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表