1.  
  2. 主页
  3.  / 
  4. Python基础到高级
  5.  / 
  6. 文件IO操作

文件IO操作

打开和关闭文件

>>> f = open('./demo1.py')    # 使用open打开文件,返回值是一个File-like对象
>>> f.read()    # 使用read读取文件
"this is open!!"
>>> f.close()    #close 方法关闭文件

文件对象的操作

文件的操作和文件的打开方式是相关的

  • ‘r’ 打开可读文件(默认)
  • ‘w’ 打开写入,并且清空文件
  • ‘x’ 创建一个新文件并将其打开以进行写入
  • ‘a’ 文件必须不存在,否则会抛出异常,如果文件存在,则追加到文件末尾
  • ‘b’ 二进制模式
  • ‘t’ 文字模式(默认)
  • ‘+’ 打开一个磁盘文件进行更新(读写)
  • ‘U’ 通用换行模式(不推荐使用)

f = open('./demo1.py', mode='r')
f.read() 
f.close()

f = open('./test.py',mode='w')
f.write('this is test!')
f.close()

mode = w 仅可写权限,会清空文件,然后在写入数据
即使打开后,不做任何操作,也会清空文件
当文件不存在时,会创建文件

创建新文件,并写入文件,x关键字

f = open('./test1.txt',mode='x')
f.write('test1')
f.close()

mode=x 的话,是不可读的,但是可写的
x 和 w不同的地方就是,x 总是创建新文件,若是文件存在则会抛出错误

追加

f = open('./test1.txt',mode='a')
f.write('a')
f.close()

mode=a 不可读,可写
写入的内容追加到文件的末尾

从读写方面来看,只有r可读不可写,其他的都是可写不可读

从文件不存在来看,只有r抛出异常,其他的都创建文件

从文件存在来看,只有x抛出异常

从是否原始内容来看,只有w会清空文件

读取文件返回值为字符串

f = open('./test1.txt', mode='rt')   # mode='rt' 读入的数据是字符串
s = f.read()
f.close()

读取文件返回值为bytes

f = open('./test1.txt', mode='rb')   # mode='rb' 读入的数据是bytes
s = f.read()
f.close()
  • mode=t 按照字符来操作
  • mode=b 按照字节来操作

文件可读可写

f = open('./test1.txt', mode='r+')   实现文件可读可写,mode=r的时候,指针指向0(文件开始)
f.read()
f.write('test')
f.close()

f = open('./test1.txt', mode='w+')   首先清空文件,然后文件可读可写
f.read()
f.write('test')
f.close()

文件追加

f = open('./test1.txt', mode='a')  mode=a 的时候,Python指针指向EOF(文件末尾)
f.write('test')
f.close()

单独的 + 是不能工作的,mode里必须有且仅有 rwxa 中的一个

当mode包含 + 时,会增加额外的读写操作,也就说原来是只读,会增加可写的操作,原来是可写,会增加可读的操作,但是 + 不改变其他行为

f = open('./test1.txt')
f.tell()   # 获取当前文件内容的指针位置,默认是r,因此默认指针是0,文件读取后,指针就到文件末尾了
f.seek(4,0)   # 一定指针,从指针0到指针4
f.close()

mode = t

  • 按照字符移动文件指针
  • 当whence为start(0)默认值, offset可以是任意整数
  • 当whence为current(1)或者end(2),offset只能为0

当seek超出文件末尾,不会有异常,tell也会超出文件末尾,但是写数据的时候,还是会从文件开始写

write 操作从min(EOF,tell()) 处开始。

  • 文件指针按照字节操作
  • tell方法返回当前文件指针位置
  • seek方法移动文件指针
  • whence参数START(0), CUR(1), END(2)
  • 当mode=t时,whence为seek_cur,或者seek_end, offset只能为0
  • 文件指针不能为负数
  • 读文件的时候从文件指针(pos)开始向后读
  • 写文件的时候从min(EOF, pos)处开始向后写

这方面还有很多细节的东西,但是用到的不多,反正我用到的不多,就不详细记录了

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

您的电子邮箱地址不会被公开。