python基础(13):文件

打开文件

可使用函数open,它位于自动导入的模块io中。

# 1.open函数将文件名作为唯一必不可少的参数,返回一个可读取的文件对象
>>> open("a.py")   
<_io.TextIOWrapper name='a.py' mode='r' encoding='cp936'>
# 2.如果要写入文件,必须通过指定模式来显式地指出这一点

# 3.若不存在该文件,则会产生如下错误
>>> f=open("b.py") 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'b.py'

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

mode值描述说明
‘r’读取模式(默认值)显式地指定读取模式的效果与根本不指定模式相同。
‘w’写入模式能够写入文件,并在文件不存在时创建它;
在写入模式下打开文件时,原有内容将被删除,从文件开头处开始写入
‘x’独占写入模式在文件已存在时引发FileExistsError异常。
‘a’附加模式如果要在既有文件末尾继续写入,可使用附加模式
‘b’二进制模式(与其他模式结合使用)如果文件包含非文本的二进制数据,如声音剪辑片段或图像,需使用二进制模式(如’rb’)来禁用与文本相关的功能。
‘t’文本模式(默认值,与其他模式结合使用)默认模式为’rt’,把文件视为经过编码的Unicode文本,将自动执行解码和编码,且默认使用UTF-8编码。要指定其他编码和Unicode错误处理策略,可使用关键字参数encodingerrors
‘+’读写模式(与其他模式结合使用),既可读取也可写入'r+'和’w+'都有读写功能:
‘r+’:从头开始覆盖原有内容(可能会保留部分)
‘w+’:删除原有内容,重新开始写入
# 1.'x':独占写入模式
# 1) 在文件已存在时,引发FileExistsError异常
>>> f=open('a.py','x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'a.py'
# 2)在文件不存在的时候,正常执行
>>> f=open('b.py','x')
>>> f.write("test")
4  # 返回写入字串的长度
>>> f.close()

# 2.读写模式:r+与w+
>>> f=open('b.py','r+')
>>> f.write("aaa")  
3
>>> f.write("bbb")   
3
>>> f.close()  #关闭后,才写入文件内容:test-> aaabbb
>>> f=open('b.py','r+')
>>> f.write("cccc")  #文件内容:aaabbb -> ccccbb
4
>>> f.close()
>>> f=open('b.py','w+')   
>>> f.write('aa')   #文件内容:ccccbb -> aa
2
>>> f.close()

文件的基本方法

读入和写入

(参见前面的内容)

随机存取
seek(offset[, whence]):将当前位置(执行读取或写入的位置)移到 offset 和whence 指定的地方。

  • 参数 offset: 指定了字节(字符)数
  • 参数 whence默认为 io.SEEK_SET(0):偏移量是相对于文件开头的(偏移量不能为负数)。
    • 参数 whence 还可设置为 io.SEEK_CUR(1)或 io.SEEK_END(2)
      • io.SEEK_CUR(1):表示相对于当前位置进行移动(偏移量可以为负)
      • io.SEEK_END(2):表示相对于文件末尾进行移动。
>>> f = open(r'C:\text\somefile.txt', 'w') 
>>> f.write('01234567890123456789') 
20 
>>> f.seek(5)
5 
>>> f.write('Hello, World!') 
13 
>>> f.close() 
>>> f = open(r'C:\text\somefile.txt') 
>>> f.read() 
'01234Hello, World!89'

# 方法 tell()返回当前位于文件的什么位置,如下例所示: 
>>> f = open(r'C:\text\somefile.txt') 
>>> f.read(3) 
'012' 
>>> f.read(2) 
'34' 
>>> f.tell() 
5

使用管道重定向输出

在这里插入图片描述
Window 命令行解释器cmd:

F:\study\work\code> type b.txt | python somescript.py | sort
Wordcount: 2  # 输出结果

#description:
#	1.type somefile.txt:将文件somefile.txt的内容写入到标准输出(sys.stdout)。
#	2.python somescript.py:执行Python脚本somescript。这个脚本从其标准输入中读取,并将结果写入到标准输出。
#	3.sort:读取标准输入(sys.stdin)中的所有文本,将各行按字母顺序排序,并将结果写入到标准输出。

管道字符(" | "):管道将一个命令的标准输出链接到下一个命令的标准输入。即:somescript.py从其sys.stdin中读取数据(这些数据是somefile.txt写入的),并将结果写入到其sys.stdout(sort
将从这里获取数据)。


[ 参考文档 ]

  • [挪]-Magnus-Lie-Hetland-Python基础教程(第3版)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值