Python基础教程 学习笔记 第十一章 文件

本文详细介绍Python中文件操作的基础知识,包括文件的打开与关闭、基本读写方法、随机存取、迭代文件内容以及使用上下文管理器。文章还介绍了文件模式、换行符处理和文件迭代器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一,打开文件

open,将文件名作为唯一必不可少的参数,并返回一个文件对象,
当前目录直接输入名字+后缀,其他地方则需提供完整路径。

1.1. 文件模式(open的第二个参数——mode)

函数 open 的参数 mode 的最常见取值

描 述
‘r’读取模式(默认值)
‘w’写入模式
‘x’独占写入模式
‘a’附加模式
‘b’二进制模式(与其他模式结合使用)
‘t’文本模式(默认值,与其他模式结合使用)
‘+’读写模式(与其他模式结合使用)

①显式地指定读取模式的效果与根本不指定模式相同
②写入模式让你能够写入文件,并在文件不存在时创建它,以写入模式打开文件时,将会删除(截断)既有内容,并从文件开头开始写入。
③独占写入模式更进一步,在文件已存在时引发 FileExistsError 异常。
④附加模式,从既有文件尾继续写入。
⑤!!! ‘r+’ 和 ‘w+’ 之间有个重要差别:后者截断文件,而前者不会这样做。
两者都是读写
⑥默认模式为 ‘rt’ ,这意味着将把文件视为经过编码的Unicode文本,因此将自动执行解码和
编码,且默认使用UTF-8编码。要指定其他编码和Unicode错误处理策略,可使用关键字参数
encoding 和 errors。 (有关Unicode的详细信息,请参阅第1章。)这还将自动转换换行字符。默认情况下,行以 ‘\n’ 结尾。读取时将自动替换其他行尾字符( ‘\r’ 或 ‘\r\n’ );写入时将 ‘\n’ 替换为系统的默认行尾字符( os.linesep )。

1.2. open的第三个参数——newline

将newline设为空字符串,Python使用__通用换行模式__,readline方法能够识别所有合法的换行符(’\n’ , ‘\r’ , ‘\r\n’),这还会禁用自动转换。

如果指定将newline设为‘\r’,则只将‘\r’视为合法行尾字符,读入时不会转化这个行尾字符,但写入时将‘\n’替换为指定的行尾字符。

非文本用‘rb’

二,文件的基本方法

2.1 读取read 写入 write

在文本和二进制模式下,基本上分别将str和bytes类作为数据

write将写入本次打开文件后已写内容的后面。

>>> f=open('somefile.txt','w+')
>>> f.write("Hello, ")
7
>>> f.write('World!')
6
>>> f.read()
'' # close后文件写入才会被保存
>>> f.close()
>>> f = open('somefile.txt', 'r')#默认‘r’模式
>>> f.read(4)
'Hell'
>>> f.read()
'o, World!'

read参数指定读取几个,没有参数则从当前位置一直读到末尾。

(管道?P216)

2.2.随机存取
方法 seek(offset[, whence])

将当前位置(执行读取或写入的位置)移到 offset 和 whence 指定的地方。

参数 offset 指定了字节(字符)数

参数 whence 默认为 io.SEEK_SET( 0),这意味着偏移量是相对于文件开头的(偏移量不能为负数),还可设置
为 io.SEEK_CUR (1)或 io.SEEK_END(2),其中前者表示相对于当前位置进行移动(偏移量可以为负),而后者表示相对于文件末尾进行移动

方法 tell() 返回当前位于文件的什么位置
2.3.读取,写入行
readline:

不提供参数 读取一行并返回这一行。
提供非负整数,指定readline最多可读取多少个字符

readlines:

要读取文件中的所有行,并以列表的方式返回它们

writelines:

接受一个字符串列表(或任何序列或可迭代对象),并将它们写入文件(或流)中。
!!!注意:写入时并不会添加换行符

没有writeline 因为有write

三,关闭文件

close (尽管程序退出时会自动关闭文件对象)

为确保文件关闭,可用try/finally语句,在finaly中调用close

# 在这里打开文件
try:
# 将数据写入到文件中
finally:
	file.close()

或用上下文管理器:

with open("somefile.txt") as somefile:#将文件对象赋给somefile
	do_something(somefile)

拓展——上下文管理器;
with 语句实际上是一个非常通用的结构,允许你使用所谓的 上下文管理器。上下文管理器是支持两个方法的对象: __enter__ 和 __exit__ 。
方法 __enter__ 不接受任何参数,在进入 with 语句时被调用,其返回值被赋给关键字 as 后面的变量。
方法 __exit__ 接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果 __exit__ 返回 False ,将抑制所有的异常。
文件也可用作上下文管理器。它们的方法__enter__ 返回文件对象本身,而方法 __exit__关闭文件。


四,迭代文件内容

4.1. fileinput 延迟迭代

注意,模块 fileinput 会负责打开文件,你只需给它提供一个文件名即可

import fileinput
for line in fileinput.input(filename):
	process(line)
4.2 文件迭代器
with open(filename) as f:
	for line in f:
		process(line)

注意:标准输入流 sys.stdin 也是可迭代的

>>> f = open('somefile.txt', 'w')
>>> print('First', 'line', file=f)
>>> print('Second', 'line', file=f)
>>> print('Third', 'and final', 'line', file=f)
>>> f.close()
>>> lines = list(open('somefile.txt'))
>>> lines
['First line\n', 'Second line\n', 'Third and final line\n']
>>> first, second, third = open('somefile.txt')
>>> first
'First line\n'
>>> second
'Second line\n'
>>> third
'Third and final line\n'

 使用 print 来写入文件,这将自动在提供的字符串后面添加换行符。
 对打开的文件进行序列解包,从而将每行存储到不同的变量中。(这种做法不常见,因为通常不知道文件包含多少行,但这演示了文件对象是可迭代的。)
 写入文件后将其关闭,以确保数据得以写入磁盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值