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

本文深入探讨Python中的文件操作,从基础知识到open()函数的详细使用,涵盖文件的打开、读写操作。介绍了文本文件和二进制文件的区别,以及pickle模块在存储Python原生对象中的应用,还有struct模块在处理打包二进制数据上的使用。
摘要由CSDN通过智能技术生成

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 : 可以通过传递可调用的opener 来自定义开启器。通过使用参数调用opener获得文件对象的文件描述符。

1.2.2 文件的常见运算

读入名为 data 的文件并返回一个Python文件对象给,文件对象名为 input :

input = open('data','r')   #

将文件对象 input 读入进一个单一字符串:

aString = input.read()

将文件对象 input 开始N个字节之后的数据读入进一个单一字符串:

aString = input.read(N)

读取文件对象input的下一行到一个字符串:

aString = input.readline()

读取整个文件对象到字符串列表:

aList = input.readlines()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值