• 【python3的学习之路十四】IO编程


    图片.png

    File(文件) 方法

    file 对象使用 open 函数来创建

    file.close()                关闭文件。关闭后文件不能再进行读写操作。
    file.flush()                刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
    file.fileno()               返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
    file.isatty()                如果文件连接到一个终端设备返回 True,否则返回 False。
    file.next()                  返回文件下一行。
    file.read([size])            从文件读取指定的字节数,如果未给定或为负则读取所有。
    file.readline([size])        读取整行,包括 "
    " 字符。
    file.readlines([sizeint])    读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
    file.seek(offset[, whence])  设置文件当前位置
    file.tell()                  返回文件当前位置。
    file.truncate([size])        从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
    file.write(str)              将字符串写入文件,返回的是写入的字符长度。
    file.writelines(sequence)    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

    读文件

    要以读文件的模式打开一个文件对象,需要使用python内置的open()函数。

    f = open('xxx/test.txt', 'r')
    # 标识符'r'表示读
    f.read()
    # 文件打开成功,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示
    f.close()
    # 调用close()方法关闭文件

    由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用

    with open('xxx/test.txt', 'r') as f:
         print(f.read())

    用readline()可以每次读取一行内容,调用readline()一次读取所有内容并按行返回list

    for line in f.readlines():
        print(line.strip())  # 把末尾的'
    '删掉

    字符编码

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

    f.open('xxx/test.txt', 'r', encoding = 'GBK' errors = 'ignore')
    f.read()
    # 遇到有些编码不规范的文件,可能会遇到UnicodeDecodeError,遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略

    写文件

    调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或者二进制文件

    f = open('xxx/test.txt', 'w')
    f.write('Hello, world!')
    f.close()

    当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而实放入内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘,忘记调用close()的后果时数据可能只写了一部分到磁盘,剩下的丢失。

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

    以’w’模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入’a’以追加(append)模式写入。

    StringIO

    很多时候,数据读写不一定时文件,也可以在内存中读写。StringIO就是在内存中读写str。getvalue()方法用于获得写入后的str。

    from io import StringIO
    
    f = StringIO()
    f.write('hello')
    f.wirte(' ')
    f.write('world!')
    print(f.getvalue())
    # hello world!

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

    from io import StringIO
    
    f = StringIO('Hello!
    Hi!
    Goodbye!')
    while True:
         s = f.readline()
         if s == '':
            break
         print(s.strip())
    # Hello!
    # Hi!
    # Goodbye!

    bytesIO

    StringIO操作的只能是str,如果要操作二进制数据,就需要使用bytesIO。
    BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes。

    from io import BytesIO
    
    f = BytesIO()
    f.write('中文', encode('UTF-8'))
    print(f.getvalue()) # b'xe4xb8xadxe6x96x87'

    此时写入的不是str,而是经过UTF-8编码的bytes。
    和StringIO类似,可以用一个bytes初始化BytesIO,然后像文件一样读取

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

    OS文件/目录方法

    环境变量

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

    import os
    
    os.name # 操作系统类型如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统
    os.uname()  # 获取详细的系统信息,uname()函数在windows上不提供
    os.environ  # 获取操作系统中定义的环境变量
    os.environ.get('PATH') # 获取某个环境变量的值

    操作文件和目录

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

    # 查看当前目录的绝对路径:
    >>> os.path.abspath('.')
    '/Users/michael'
    # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
    >>> os.path.join('/Users/michael', 'testdir')
    '/Users/michael/testdir'
    # 拆分文件路径
    >>> os.path.split('/Users/michael/testdir/file.txt')
    ('/Users/michael/testdir', 'file.txt')
    # 获取文件扩展名
    >>> os.path.splitext('/Users/michael/testdir/file.txt')
    ('/Users/michael/testdir/file.txt', 'txt')
    # 然后创建一个目录:
    >>> os.mkdir('/Users/michael/testdir')
    # 删掉一个目录:
    >>> os.rmdir('/Users/michael/testdir')
    # 对文件重命名:
    >>> os.rename('test.txt', 'test.py')
    # 删掉文件:
    >>> os.remove('test.py')
  • 相关阅读:
    蜘蛛禁止访问文件
    基于PhalApi的Smarty拓展 (视图层的应用)
    MySQL数据库存表情
    查看PHP版本等相关信息
    读取数据库表信息
    nginx简介
    Redis发布订阅
    Redis持久化
    Redis主从复制
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/CSgarcia/p/9706413.html
Copyright © 2020-2023  润新知