zoukankan      html  css  js  c++  java
  • Python核心编程学习日记之文件和输入输出

    文件和输入输出

    1. 文件对象
      1. 泛义的文件对象:具有文件类型接口的对象,例如文件,Web网页,通讯。文件就是连续的字节序列。数据的传输经常用到字节流。
      2. open(): file_object = open(file_name, access_mode = 'r', buffering = -1)。 file_name可以是相当路径或是绝对路径。file()和open()功能完全可以替换。
      3. 通用换行符支持(UNS):当使用‘U’标志打开文件时,所有的行分隔符通过Python的输入方法返回时都会被替换为换行符NEWLINE(\n)。文件对象具有newlines属性。UNS只用于读取文本文件,没有对应的处理文件输出的方法.
      4. 有关二进制文件和文本文件的讨论在笔记的末尾
    2. 文件内建方法

      文件方法分为四类:输入,输出,文件内移动,杂项操作

      1. 输入:

        read()方法用来直接读取size个字节到字符串中。不指定size,读至文件末尾。(@deprecated)

        readline()方法读取打开文件的一行,将包括行结束符的整行返回为一个字符串。也有size参数

        readlines()方法读取所有(剩余)行,返回字符串列表。sizhint代表返回的最大字节大小

      2. 输出:

        write()含有文本数据或二进制数据块的字符串写入到文件中

        writelines()将一个字符串列表写入文件,但是行结束符不会自动加入行尾。需要自己处理列表中的字符串

        read()和readlines()读取行,不会自行删去行分隔符,write()和writelines()写入时不会自行加入行分隔符,都需要程序员自行操作。

      3. 文件内移动:

        seek()可以再文件中移动文件指针到不同的位置。offset字节代表相对于某个位置的偏移量。位置的默认值为0,代表从文件开头算起,1代表从当前位置,2代表从文件末尾。(类似fseek())。

        text()方法告诉当前文件指针在文件中的位置,从文件起始算起,单位为字节。

      4. 文件方法杂项:

        close()显示关闭文件来结束对它的访问。尽早的释放句柄是个好习惯,避免对资源的空闲占用。不显示关闭文件,可能丢失输出缓冲区的数据

        fileno()返回打开文件的描述符。flush()方法会直接把内部缓冲区的数据立刻写入文件。truncate()方法将文件截取到当前文件指针位置或者到给定size,以字节为单位。

        行分隔符和其他文件系统差异:Posix系统上,行分隔符是换行符NEWLINE(‘\n’)字符,旧的MacOS下是RETURN(\r),DOS和Wind32系统结合使用两者(\r\n)。路径分隔符Posix使用“/”,Dos和Windows使用“\”,旧的MacOS使用“:”。导入os模块,跨平台时会有差异的变量自动会被设置为正确的值。

        print语句默认在输出内容末尾加一个换行符,在语句后加一个逗号可以取消这个行为。truncate()方法接受可选size作为参数,如果给定,文件将被截取到最多size字节处。没有,则截取到当前文件指针位置。tell()会返回开始截取的字节位置。

        标准文件:标准输入(一般是键盘),标准输出(到显示器的缓冲输出),标准错误(到屏幕的非缓冲输出),命名同c,stdin,stdout,stderr。访问句柄:导入sys模块,使用sys.stdin,sys.stdout,sys.stderr.print语句通常是输出到sys.stdout.内建的raw_input()通常从sys.stdin接受输入。

        sys.argv属性提供对命令行参数的访问。命令行参数是调用某个程序时除程序名以外的其它参数。sys.argv[0]永远是程序的名称

        os模块式访问操纵系统功能的主要接口。os模块还负责处理大部分的文件系统操作,包括删除/重命名文件,遍历目录树,以及管理文件访问权限等。os.path 可以完成一些针对路径名的操作. 它提供的函数可以完成管理和操作文 件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作.

    3. 永久存储模块

      数据的扁平化(或者数据的序列化,数据的顺序化)将比基本类型复杂的对象转换为一个二进制数据集合,这样就可以把数据集合保存起来或通过网络发送,然后再重新把数据集合恢复原来的对象格式。

      1. DBM风格的模块:

        多种实现:dbhash/bsddb,dbm,gdbm,dumbdbm.建议使用anydbm模块,它会自动选择最合适的。它们只能存储字符串,不能对Python对象进行序列化

      2. shelve模块:

        shelve模块使用anydbm选择最适合的DBM模块,然后使用cPickle来完成对存储转换过程。

      3. pickle和cPickle

        使用pickle模块吧Python对象直接保存到文件里。无需关心其他。pickle模块中两个函数:dump()和load()。dump()接受一个文件句柄和一个数据对象作为参数,把数据对象以特定格式保存到给定文件里。load()函数从文件取出保存的对象。cPickle是pickle的一个更快的c语言编译版本

    错误和异常

    1. 检测和处理异常

      try-except:语句语法:

      try: 
      try_suite # watch for exceptions here 
      except Exception[,reason]: 
      except_suite # exception-handling code 

      一个try当然可以带有多个except,用来分别处理多种类型的异常。一个except要处理多种异常,异常要被放在一个元组里

      当函数没有显式的返回一个值时,它就返回None

      捕获所有普通异常:except Exception:或者使用裸except子句 except:(不推荐@deprecated)

      sys.exc_info()返回最近一个被except语句捕获的异常的信息。

      两种特殊异常:SystemExit 是由于当前 Python 应用程序需要退出, KeyboardInterupt 代表用户按下了 CTRL-C (^C) , 想要关闭 Python .他们与Exception平级。要接受包括他们的所有异常,使用裸except或者except BaseException

    二进制文件和文本文件返回原处

    作为文件的数据,在计算机中都是以二进制的形式存储的,对于文本文件和二进制文件的区分,不是在物理上的,而是在逻辑上的。

    文本文件是字符序列,是基于字符编码的,存储的是字符的编码(如ASCII码)序列;二进制文件时字节序列,是基于值编码的,或者说没有什么特别的编码,它同数据在内存中的形式相同,仅仅是二进制数组成的字节序列。

    区别
    1. “文本文件、二进制文件”和“以文本方式打开、以二进制方式打开”是完全不同的概念。
    2. 是否以二进制方式打开文件,即调用fopen时是否带b,对使用fwrite以二进制方式写入的结果没有影响,不论是在Linux下还是在Windows下;对使用fprintf以文本方式写入的结果仅在Windows下有影响,影响结果就是不带b时会有‘\n'到'\r\n'的转换,带b时没有这个转换,对在Linux下的写入没有影响。
    3. 文本工具打开文件过程:首先读取文件物理上所对应的的二进制比特流,然后按照协议规定的解码方式来解释这个流,然后将解释结果显示出来。比如按照ASCII码形式,他会8个bit8个bit的解释文件流。

    感觉就是在Linux下不要管它,在windows下,如果不是以b的mode打开,换行符当成'\n'处理就行了。什么'\r\n'与‘\n’的转换,后台都处理好了。以b的mode读取,就要考虑'\r\n'的情况。。。这篇文章写的很不错。。

     

  • 相关阅读:
    如何寻找第二大轮廓
    基础_模型迁移_CBIR_augmentation
    基础_模型迁移_CBIR_augmentation
    MQ通道配置
    WebSphere MQ 入门指南
    P2P小贷网站业务数据流程分享
    发博客后自动同步摘要到新浪微博
    Linux Shell脚本攻略 读书笔记
    Linux Shell 文本处理工具集锦
    Berkeley 四种产品如何选择?
  • 原文地址:https://www.cnblogs.com/xyqhello/p/2866016.html
Copyright © 2011-2022 走看看