zoukankan      html  css  js  c++  java
  • python IO 文件读写

    IO

    由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。

    如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:

    第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;

    另一种方法是CPU不等待,只是告诉磁盘,“您慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。

    同步和异步的区别就在于是否等待IO执行的结果。

     

    文件读写

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

    >>> f = open('/Users/michael/test.txt', 'r')
    标示符'r'表示读

    如果文件不存在,open()函数就会抛出一个IOError的错误

    如果文件打开成功,调用read()方法可以一次读取文件的全部内容

    >>> f.read()
    'Hello, world!'#Python把内容读到内存,用一个str对象表示

    close()方法关闭文件
    >>> f.close()


    调用read(size)方法,每次最多读取size个字节的内容。
    调用readline()可以每次读取一行内容,
    调用readlines()一次读取所有内容并按行返回list。

    为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
    try:
    f = open('/path/to/file', 'r')
    print(f.read())
    finally:
    if f:
    f.close()

    简化:
    with open('/path/to/file', 'r') as f:
    print(f.read())
    这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

    二进制文件

    要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件
    >>> f = open('/Users/michael/test.jpg', 'rb')
    >>> f.read()
    b'xffxd8xffxe1x00x18Exifx00x00...' # 十六进制表示的字节


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

    >>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
    >>> f.read()
    '测试'

    遇到有些编码不规范的文件,pen()函数还接收一个errors参数
    >>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')


    写文件

    传入标识符'w'或者'wb'表示写文本文件或写二进制文件:

    >>> f = open('/Users/michael/test.txt', 'w')
    >>> f.write('Hello, world!')

    防止丢失使用with语句
    with语句
    with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

    追加到文件末尾
    传入'a'以追加(append)模式写入

    朝闻道
  • 相关阅读:
    将vs2010换成vs2012的主题
    写了个油猴脚本
    Myeclipse10下的access数据库配置
    点击按钮触发声音(xaml实现)
    自定义的可拖动窗体
    在博客添加时钟
    定时器写的闪光字
    C语言I博客作业02
    c语言|博客作业02
    关于软件工程的一些疑问
  • 原文地址:https://www.cnblogs.com/wander-clouds/p/8464242.html
Copyright © 2011-2022 走看看