Python基础十八:IO编程二:操作目录

Python基础十七:IO编程二:操作目录


Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程


Author:yooongchun

Email:yooongchun@foxmail.com


  • os 模块:Python提供了os模块来支持对文件的操作,下面列举部分比较常见的操作

    • 获取系统类型
    import os
    print(os.name)
    
    # 输出结果
    
    
    # nt
    
    
    # [Finished in 0.2s]
    

    os.name会获取系统的类型,nt 代表的是Windows系统,而posix 代表Linux Unix 或者Mac OS X

    • 获取环境变量
    import os
    print(os.environ)
    
    # 输出结果
    
    environ({'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'PROMPT': '$P$G', 'PYTHONIOENCODING': 'utf-8', ...})
    [Finished in 0.2s]

    系统的环境变量都会储存在这个变量中,如果要获取某个变量的值,可以调用方法:os.environ.get() 方法:

    import os
    print(os.environ.get("Path"))
    
    # 输出结果
    
    C:\Users\fanyu\Anaconda3\Library\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;....
    [Finished in 0.1s]
    • 创建文件或目录
    import os
    parent=os.path.abspath(".")#获取当前路径的绝对路径地址
    print(parent)# 输出当前路径绝对路径
    new_folder_path=os.path.join(parent,'testdir')# 新的文件夹绝对路径
    print(new_folder_path)
    flag=os.path.isdir(new_folder_path) # 判断是否存在该目录
    print(str(flag))
    os.mkdir(new_folder_path) # 创建该目录
    flag=os.path.isdir(new_folder_path) # 判断创建的目录是否存在
    print(str(flag))
    os.rmdir(new_folder_path) # 移除目录
    flag=os.path.isdir(new_folder_path) #
    print(flag)

    输出结果:

    D:\data\schoolwork\code
    D:\data\schoolwork\code\testdir
    False
    True
    False
    [Finished in 0.2s]

    我们来分析上面的代码:

    首先程序获取当前目录的绝对路径并打印出来:D:\data\schoolwork\code

    接下来程序使用os.path.join() 函数拼接出一个新的地址:D:\data\schoolwork\code\testdir

    然后用os.path.isdir() 来判断该目录是否存在: False

    紧接着程序创建了该目录:os.mkdir(new_folder_path) # 创建该目录 再判断其是否存在:True

    最后程序移除了该目录: os.rmdir(new_folder_path) # 移除目录

    这里要说明几个函数,能够方便程序开发

    • os.path.split() :这个函数能将一个路径按照系统的不同将路径划分为两个部分,一个是其父路径,另一个为其文件名全称

    • os.path.splitext() :这个函数能把一个路径按照后缀分开

      import os
      path="C:/users/fanyu/desktop/test.txt"
      print("split result:\n",os.path.split(path))
      print("splitext result:\n",os.path.splitext(path))
      
      # 输出结果
      
      split result:
      ('C:/users/fanyu/desktop', 'test.txt')
      splitext result:
      ('C:/users/fanyu/desktop/test', '.txt')
      [Finished in 0.1s]
    • os.path.join():该函数能根据系统的不同将路径拼接起来

      import os
      path=os.path.join("c:/users/fanyu/desktop",'test.txt')
      print(path)
      
      # 结果
      
      c:/users/fanyu/desktop\test.txt
      [Finished in 0.1s]
    • os.rename() :对文件重命名

    • os.remove(): 删除文件

    • 由于os 模块所提供的函数都是对系统封装的调用,因而如果某功能,比如文件复制,没有相应的系统调用的话os 模块也就没有相应的函数,基于此,Python提供了 shutil 模块来作为os 模块的补充,来提供一些别的文件操作相关的函数,比如复制文件shutil.copyfile 比如删除非空目录shutil.rmtree

  • 序列化:把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling ,在其他语言中也被称之为serializationmarshallingflattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。Python提供了pickle 模块来进行序列化操作

    • pickle.dumps():序列化操作
    import pickle
    d=dict(name='Lisa',score=100,age=20)
    print(pickle.dumps(d))
    
    # 输出结果:
    
    b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Lisaq\x02X\x05\x00\x00\x00scoreq\x03KdX\x03\x00\x00\x00ageq\x04K\x14u.'
    [Finished in 0.2s]

    可以看到该函数将一根dict 对象序列化为了二进制的数据(这里显示为16进制)

    • pickle.dump():将对象序列化后保存为文件
    import pickle
    d=dict(name='Lisa',score=100,age=20)
    f=open("test.txt","wb")
    pickle.dump(d,f)
    f.close()
    • pickle.load(): 反序列化:将序列从文件还原
    import pickle
    f=open("test.txt","rb")
    print(pickle.load(f))
    f.close()
    
    #结果
    
    {'name': 'Lisa', 'score': 100, 'age': 20}
    [Finished in 0.2s]

    可见变量又被加载回来了。另外值得提起的时是,这种序列化是高度依赖语言甚至是语言版本的,可能不同版本的Python序列化的结果都不一样,鉴于此,有为了跨平台,多兼容的序列化标准:比如json xml 等。但更好的方法是序列化为json,因为json表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。json不仅是标准格式,并且比xml更快,而且可以直接在Web页面中读取,非常方便。

  • json :使用json 进行序列化也非常方便

    import json
    d={"name":"Lisa","sroce":99,"age":20,"gender":"female"}
    print(json.dumps(d))
    
    #结果
    
    {"name": "Lisa", "sroce": 99, "age": 20, "gender": "female"}
    [Finished in 0.2s]

    加载同样也很方便:

    import json
    d={"name":"Lisa","sroce":99,"age":20,"gender":"female"}
    json_str=json.dumps(d)
    dd=json.loads(json_str)
    print(dd)
    {'name': 'Lisa', 'sroce': 99, 'age': 20, 'gender': 'female'}
    [Finished in 0.2s]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoz.cool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值