python基础 ---文件IO操作

函数功能
open打开文件
read读取文件
write写文件
close关闭文件
readline行读取
readlines多行读取

open方法

open方法:
打开一个文件,返回一个文件对象(流对象)和文件描述符,打开文件失败则抛异常
三步曲:创建文件,打开文件,关闭文件(好像是废话^_^),但是关闭文件是一个很好的习惯,否则文件描述符可能会被消耗殆尽

直接上代码:

f = open('test', 'r') #文件对象
# windows <_io.TextIOWrapper name='test' mode='r' encoding='cp936'> 
# linux <_io.TextIOWrapper name='test' mode='r' encoding='UTF-8'>
#windows默认使用的编码与linux不同
print(f.read()) #读取文件
f.close() #关闭文件
文本访问的模式:
1.文本模式
2.二进制模式

open参数

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

open参数之file:文件对象
file:打开或要创建的文件名,不指定路径的话则表示当前路径

mode模式:

模式描述字符功能
r缺省模式,只读
w只写打开,文件不存在则创建
x创建并写入一个新文件,文件已存在则报错
a只写打开,追加内容
b二进制模式
t默认模式,文本模式
+读或写打开后,使用+来增加缺失的读或写的能力

对于IO操作来说,大致以一分为两类:

  • 只读r
  • 只写w,x,a
  • 增加缺失能力
r模式: f = open('filename', 'r')
- 只读打开文件,如果使用write方法打开文件对象会抛异常
- 如果打开的文件对象不存在,则会抛FileNotFoundError异常

w模式:f = open('filename', 'w')
- 使用只写模式打开文件对象,若对文件进行读操作则会抛异常
- 如果文件对象不存在,则直接创建文件
- 如果文件对象存在,则会清空文件内容

x模式:f = open('filename', 'x')
- 打开的文件对象必须不存在,否则抛FileExistsError异常
- 创建文件,并且使用只写模式打开文件对象

a模式: f = open('filename', 'a')
- 文件存在,追加模式操作文件,并且是只写模式
- 文件不存在就会创建文件,并且使用只读模式追加操作文件

wxa模式都可以产生新文件
w不管文件存在与否,都会生成全新内容的文件
a不管文件是否存在,都能在打开的文件尾部追加
x必须要求文件事先不存在,自己要造一个新文件

文本模式:t(text模式)

字符流:将文件内容按照一定的编码规范来理解,按照字符操作。open方法
的默认模式就是rt
with open('test.ini', 'w') as e:
    # e.read()
    # e.seek(0)
    print(e.readable()) #False
    print(e.writable()) #True
    e.write('abc')

二进制模式:b(byte模式)

字节流:将文件按照字节理解,与编码规范无关。字节操作使用bytes类型

+模式:补充缺失的读或写权限

辅助功能:为r,w,a,x提供写或者读的功能
注意点:+模式不能单独使用,需配合以上四种模式使用(r, a, w, x)
open参数之encoding:编码,仅文本模式使用

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

None表示缺省编码,依据操作系统而定:

f = open('test', 'w')
f.write('啊')
f.close()
windows下默认为GBK编码(0xB0A1),Linux下缺省UTF-8(0xE5 95 8A)
文件指针

mode=r,指针起始位置在0
mode=a,指针起始位置为EOF

>>> f = open('./files/test.txt', 'a') #test.txt文件事先不存在
>>> f.write('啊abc')  #文件描述符调用write方法写入内容
>>> f.close()  #关闭文件对象
>>> cat ./files/test.txt
啊abc
>>> f1 = open('./files/test.txt', 'r') #只读模式
>>> f1.read()
'啊abc'
>>> f = open('./files/test.txt', 'wb+')
>>> f.write(b'abc')
>>> print(f.tell())# 显示文件指针当前所在
3
>>> f.read() #因为文件指针在文件末尾,因此读取文件时不能读取到内容
b''
>>> f.close()
>>> f = open('./files/test.txt', 'rb+')
>>> f.read()
b'abc'
read方法

read(size=-1): size表示读取多少个字符或字节;负数或者None表示读取到EOF

>>> f = open('filename', 'w+')
>>> f.write('hello world')
>>> f.close()

>>> f = open('filename')
>>> f.read(1) #读取一个字符
>>> f.read(3) #再读取两个字符
>>> f.close()
write方法
filename = 'o:/test.txt'
f = open(filename, 'w+')
lines = ['abc', '123\n', 'magedu'] # 需提供换行符
# for line in lines:
#     f.write(line)
f.writelines(lines)
f.seek(0) # 回到开始
print(f.read())
f.close()

文件的遍历

#f = open('filename', 'rt+')
with open(filename) as f:
	f.write('\n'.join(map(str, range(101, 120))))

with open(filename) as f:
    for line in f: # 文件对象时可迭代对象,逐行遍历
        print(line.encode()) # 带换行符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值