zoukankan      html  css  js  c++  java
  • 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:UsersfanyuAnaconda3Libraryin;C:ProgramDataOracleJavajavapath;C:Program FilesMicrosoft SQL Server130ToolsBinn;....
      [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:dataschoolworkcode
      D:dataschoolworkcode	estdir
      False
      True
      False
      [Finished in 0.2s]

      我们来分析上面的代码:

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

      接下来程序使用os.path.join() 函数拼接出一个新的地址:D:dataschoolworkcode estdir

      然后用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:
        ",os.path.split(path))
        print("splitext result:
        ",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	est.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'x80x03}qx00(Xx04x00x00x00nameqx01Xx04x00x00x00Lisaqx02Xx05x00x00x00scoreqx03KdXx03x00x00x00ageqx04Kx14u.'
      [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]
  • 相关阅读:
    《Python for Beginners》学习笔记(2)
    《Python for Beginners》学习笔记(6)
    《Python for Beginners》学习笔记(4)
    《C Primer Plus》阅读笔记(1)
    《Python for Beginners》学习笔记(7)暨结课总结
    《Python for Beginners》学习笔记(5)
    《Python基础教程》读书笔记(1)
    《Python for Beginners》学习笔记(3)
    让Rails版的FCKEditor支持动态设置上传目录
    FCKEditor与rails的集成
  • 原文地址:https://www.cnblogs.com/yczha/p/13160226.html
Copyright © 2011-2022 走看看