• Python学习之旅(二十二)


    Python基础知识(21):IO编程

    一、文件读写

    读写文件就是请求操作系统打开一个文件对象(文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)

    1、读文件

    “r”默认读取文本文件,“rb”读取二进制文件,如图片、视频等

    >>> f=open("D:Pythondoithello.txt","r")
    >>> f.read()
    'Hello, world!'
    >>> f.close()

    (1)read()一次读取全部文件

    read(size)一次最多读取size个字节长的内容

    readline()每次读取一行内容

    readlines()一次读取所有内容并返回list

    (2)由于读取文件的过程中可能会出错,为保证无论有没有出错都能关闭文件,因而引用“try......finally......”

    更为方便的办法是使用with

    try:
        f = open('/path/to/file', 'r')
        print(f.read())
    finally:
        if f:
            f.close()
    
    
    #with
    with open('/path/to/file', 'r') as f:
        print(f.read())

    (3)读取utf-8文件时,需要给open()函数传入encoding参数

    (4)遇到有些编码不规范的文件时会出现UnicodeDecodeError,此时只需要给open()函数传入error参数,直接忽略这个错误

    2、写文件

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

    >>> f=open("D:Pythondoithello.txt","w")
    >>> f.write("Everything will be fine.")
    24 >>> f.close()

    调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘

    使用with语句确保数据被写入

    with open('/Users/michael/test.txt', 'w') as f:
        f.write('Hello, world!')

    注:(1)要写入特定编码的文本文件,要给open()函数传入encoding参数,将字符串自动转换成指定编码

    (2)如果要写入文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果要把内容追加到文件末尾,可以传入'a'以追加(append)

    二、StringIO和BytesIO

     内存中读写str和bytes

    1、StringIO:内存中读写str

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

    getvalue()方法用于获得写入后的str

    >>> from io import StringIO
    >>> f = StringIO()
    >>> f.write('hello')
    5
    >>> f.write(' ')
    1
    >>> f.write('world!')
    6
    >>> print(f.getvalue())
    hello world!

    要读取StringIO,可以用一个str初始化StringIO,像读文件一样读取

    >>> from io import StringIO
    >>> f = StringIO("Hey,
    guy.
    Are you OK?")
    >>> while True:
        s = f.readline()
        if s == '':
            break
        print(s.strip())
    
        
    Hey,
    guy.
    Are you OK?

    2、BytesIO:内存中读写二进制

    创建一个BytesIO,然后写入一些bytes

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

    用一个bytes初始化BytesIO,然后,像读文件一样读取

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

    三、操作文件和目录

     在Python语言中,操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中

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

    将两个路径合并成一个,通过os.path.join()函数

    通过os.path.split()函数,把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名

    四、序列化

    把变量从内存中变成可存储或传输的过程称之为序列化(pickling),序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上

    把变量内容从序列化的对象重新读到内存里称之为反序列化(unpickling)

    pickle模块来实现序列化

    pickle.dumps()方法把任意对象序列化成一个bytes,并把这个bytes写入文件。

    pickle.dump()方法直接把对象序列化后写入一个file-like Object

    JSON

    要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式

    JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输

  • 相关阅读:
    eclipse方法注释模板 东师理想
    Unsupported major.minor version 51.0错误 东师理想
    char(36)各种生成方法 东师理想
    jdbcTemplate增删改查 东师理想
    request.getParameter()获取前台值为null 东师理想
    alt和title的区别(转) 东师理想
    MySql与SqlServer的一些常用用法的差别(转) 东师理想
    moodle平台安装及babelium插件的使用 东师理想
    关于jsp页面中的pageEncoding和contentType以及html中的<meta标签中字符集的设置(转) 东师理想
    CPU 用户时间 系统时间(转载)
  • 原文地址:https://www.cnblogs.com/finsomway/p/10057957.html
Copyright © 2020-2023  润新知