Python入门(八):对象类型之文件

文件

  • 1. 文件和文件对象
    • 1.1 基础知识
    • 1.2 文件的基本操作
      • 1.2.1 open()函数详解
      • 1.2.2 文件的常见运算
      • 1.2.3 使用文件的注意
  • 2. 文件使用实例
    • 2.1 open函数存储文件
    • 2.2 pickle模块存储Python原生对象
    • 2.3 用struct模块存储和解析打包的二进制数据

1. 文件和文件对象

1.1 基础知识

  文件是存储在某种长期储存介质的数据流。这些数据被操作系统管理,并且被操作系统会组织成文件系统。文件都带有名字并放在特定的文件夹或目录中。Python需要与文件建立连接,才能对文件进行操作。Python使用内置的open()函数打开文件,返回一个可以处理的文件对象(file object),这样就可以通过调用返回文件对象的方法来读写相关外部文件。

  Python中共有三种类别的文件对象: 原始二进制文件, 缓冲二进制文件 以及 文本文件。它们的接口定义均在 io 模块中。注意:Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。 Python处理的文件类型由open()函数的第二个参数决定。

  • 二进制文件和文本文件

  二进制文件就是第二个参数 (模式字符串) 包含一个'b'打开的文件。文本文件实际是访问一个面向字节的数据流并自动处理 text encoding。文本文件的例子包括以文本模式('r''w')打开的文件。二进制文件把内容表示为一个特殊的Bytes字符串类型,并且允许程序不修改地访问文件内容;文本文件把内容表示为常规的str字符串,自动执行Unicode编码和解码,并且默认执行末行转换。

1.2 文件的基本操作

1.2.1 open()函数详解

open()函数: 打开文件,返回一个文件对象,如果文件不能够打开,会返回OsError.

open( file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file 是一个路径类对象,表示打开文件的路径 ( 绝对路径或者当前工作目录的相对路径 ) 或者一个非负整数的文件描述符。

mode 是模式字符串,指定打开文件的模式。默认值是'r' ,这意味着它以文本模式打开并读取。常见的模式字符串如下:

模式字符串 意义
r 读取模式(默认)
w 写入模式,并先截断文件(文件内容清空)
a 写入模式,如果文件存在,则在末尾追加内容
x 排他性创建模式,如果文件存在则失败
b 二进制模式
t 文本模式(默认)
+ 更新磁盘文件(读取并写入)

在文本模式,如果 encoding 没有指定,则根据平台来决定使用的编码,查看当前平台使用的编码可以使用locale.getpreferredencoding(False)

>>> import locale
>>> locale.getpreferredencoding(False)
'UTF-8'

像之前提到的二进制文件和文本文件,以二进制模式打开的文件返回的内容为 bytes对象,不进行任何解码。在文本模式下,文件内容返回为 str ,首先使用指定的 encoding 或者使用平台默认的的字节编码解码。

buffering是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),也就是调用写入方法时立即传给外部文件;传递1选择行缓冲(仅在文本模式下可用),并且>1的整数以指示固定大小的块缓冲区的大小(以字节为单位)。buffering 的默认工作方式为:
1).二进制文件以固定大小的块进行缓冲,缓冲区的长度通常为4096或8192字节。
2). “交互式”文本文件使用行缓冲,其他文本文件使用固定块缓冲。

encoding 是用于解码或编码文件的编码的名称,仅适用于文本模式。默认编码为平台的编码,也支持其他的编码方法。参见Python codecs模块.

errors 可选字符串参数,指定如何处理编码和解码错误 (同样针对文本模式)。 这里不详细展开,可参见codecs错误处理方案

newline 控制通用换行模式如何生效(仅适用于文本模式)。它可以是 None' '' \n''\r''\r\n'

  • 输入时:如果newline = None,则采用通用换行模式。输入中的行可以以 '\n''\r''\r\n' 结尾,这些行都被翻译成 '\n'。如果newline = ’ ', 同样采用通用换行模式,但是行结尾将返回未翻译的字符给调用者。如果newline为任何其他的合法值,则输入行仅由给定字符串终止。
  • 输出时:如果 newline = None,则写入的任何换行字符都将转换为各个系统默认的行分隔符 os.linesep 。 如果newline = ' ' 或者' \n',则不进行翻译。如果 newline 是其他的合法值,则写入的任何换行字符将被转换为给定的字符串。

closefd :如果file为文件名,closefd 必须为True(默认值),否则会引发错误;如果file为文件描述符,设置closefd = False 可以使得底层文件描述符在文件关闭时仍然保持打开。

opener : 可

你可能感兴趣的:(Python新手入门,Python文件,文件处理)