zoukankan      html  css  js  c++  java
  • Python学习12

    IO编程

    读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

    读文件

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标识符

    f=open('      ','r')

    空格表示文件位置,‘r’表示读,这样就可以成功打开一个文件

    如果文件不存在,open()就会抛出一个IOError错误,告诉你文件不存在

    如果文件成功打开,接下来用read()方法可以一次性读取文件的 全部内容,Python把内容读到内存,用一个str对象表示

    f.read()

    最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

    f.close()

    由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现

    try:
        f = open('    ', 'r')
        print(f.read())
    finally:
        if f:
            f.close()
    

    但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

    with open('     ', 'r') as f:
        print(f.read())
    

    这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

    如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便

    file-like Object

    open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。

    StringIO就是在内存中创建的file-like Object,常用作临时缓冲。

    二进制文件

    前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

    字符编码

    要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数

    写文件

    写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件

    StringIO和BytesIO

    StringIO

    很多时候,数据读写不一定是文件,也可以在内存中读写。

    StringIO顾名思义就是在内存中读写str

    要吧str写入StringIO,需要先创建一个StringIO,然后像文件一样写入即可

    BytesIO

    StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO

    BytesIO实现了在内存中读写Bytes,我们创建一个BytesIO,然后写入一些bytes

    >>> from io import BytesIO
    >>> f = BytesIO()
    >>> f.write('中文'.encode('utf-8'))
    6
    >>> print(f.getvalue())
    b'xe4xb8xadxe6x96x87'
    

    请注意,写入的不是str,而是经过UTF-8编码的bytes。

    和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:

    >>> from io import BytesIO
    >>> f = BytesIO(b'xe4xb8xadxe6x96x87')
    >>> f.read()
    b'xe4xb8xadxe6x96x87'
    

     

    StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

    操作文件和目录

    打开Python交互式命令行,我们来看看如何使用os模块的基本功能:

    >>> import os
    >>> os.name # 操作系统类型
    'posix'
    

    如果是posix,说明系统是LinuxUnixMac OS X,如果是nt,就是Windows系统。

    要获取详细的系统信息,可以调用uname()函数

    注意uname()函数在Windows上不提供,也就是说,os模块的某些函数是跟操作系统相关的。

    环境变量

    在操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看

    要获取某个环境变量的值,可以调用os.environ.get('key')

    操作文件和目录

    操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中,这一点要注意一下。查看、创建和删除目录可以这么调用:

    # 查看当前目录的绝对路径:
    >>> os.path.abspath('.')
    '/Users/michael'
    # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
    >>> os.path.join('/Users/michael', 'testdir')
    '/Users/michael/testdir'
    # 然后创建一个目录:
    >>> os.mkdir('/Users/michael/testdir')
    # 删掉一个目录:
    >>> os.rmdir('/Users/michael/testdir')
    

    把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符。在Linux/Unix/Mac下,os.path.join()返回这样的字符串:

    part-1/part-2
    

    而Windows下会返回这样的字符串:

    part-1part-2
    

    同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名

    os.path.splitext()可以直接让你得到文件扩展名,很多时候非常方便

    Python的os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中。

    序列化



  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/tangmf/p/14115933.html
Copyright © 2011-2022 走看看