Python学习笔记11:文件

文件

打开文件

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

描述
‘r’读取模式(默认值)
‘w’写入模式
‘x’独占写入模式
‘a’附加模式
‘b’二进制模式(与其他模式结合使用)
‘t’文本模式(默认值,与其他模式结合使用)
‘+’读写模式(与其他模式结合使用)
  • 显式地指定读取模式的效果与根本不指定模式相同
  • 写入模式让你能够写入文件,并在文件不存在时创建它
  • 独占写入模式更进一步,在文件已存在时引发FileExistsError异常
  • 在写入模式下打开文件时,既有内容将被删除(截断),并从文件开头处开始写入;如果要在既有文件末尾继续写入,可使用附加模式

文件的基本方法

  1. 读取和写入
>>> f = open('somefile.txt', 'w') 
>>> f.write('Hello, ') 
7 
>>> f.write('World!') 
6 
>>> f.close()

>>> f = open('somefile.txt', 'r') 
>>> f.read(4) 
'Hell' 
>>> f.read() 
'o, World!'

PS:

随机存取

  • seek seek(offset[, whence])将当前位置(执行读取或写入的位置)移到 offset 和whence 指定的地方
  • tell 返回当前位于文件的什么位置
  1. 使用管道重定向输出
$ cat somefile.txt | python somescript.py | sort
  1. 读取和写入行
  • readline 成行地读取,也可提供一个非负整数,指定readline最多可读取多少个字符
  • readlines 读取文件中所有行
  • writelines 接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中

PS:

没有writeline,可以使用write

  1. 关闭文件
  • close 将文件关闭
  • flush 重置缓冲,让所做的修改反映到磁盘文件中

PS:根据使用的操作系统和设置,flush可能出于锁定考虑而禁止其他正在运行的程序访问这个文件

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

# with
with open("somefile.txt") as somefile: 
    do_something(somefile)

迭代文件内容

  1. 每次一个字符(或字节)
with open(filename) as f: 
    while True:
        char = f.read(1) 
        if not char: break 
        process(char)

  1. 每次一行
with open(filename) as f: 
    while True: 
    line = f.readline() 
    if not line: break 
    process(line)

  1. 读取所有内容(文件不太大时)
# 使用read迭代字符
with open(filename) as f: 
    for char in f.read(): 
    process(char)

# 使用readlines迭代行
with open(filename) as f: 
    for line in f.readlines(): 
    process(line)

  1. 使用fileinput实现延迟行迭代
# 只读取实际需要的文本部分,或使用while循环和readline结合
import fileinput 
for line in fileinput.input(filename): 
    process(line)

  1. 文本迭代器
with open(filename) as f: 
    for line in f: 
    process(line)

小结

类似于文件的对象:类似于文件的对象是支持read和readline(可能还有write和writelines)等方法的对象。

打开和关闭文件:要打开文件,可使用函数open,并向它提供一个文件名。如果要确保即便发生错误时文件也将被关闭,可使用with语句。

模式和文件类型:打开文件时,还可指定模式,如’r’(读取模式)或’w’(写入模式)。通过在模式后面加上’b’,可将文件作为二进制文件打开,并关闭Unicode编码和换行符替换。

标准流:三个标准流(模块sys中的stdin、stdout和stderr)都是类似于文件的对象,它们实现了UNIX标准I/O机制(Windows也提供了这种机制)。

读取和写入:要从文件或类似于文件的对象中读取,可使用方法read;要执行写入操作,可使用方法write。

读取和写入行:要从文件中读取行,可使用readline和readlines;要写入行,可使用writelines。

迭代文件内容:迭代文件内容的方法很多,其中最常见的是迭代文本文件中的行,这可通过简单地对文件本身进行迭代来做到。还有其他与较旧Python版本兼容的方法,如使用readlines。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值