Python3 文件其他重要属性

前面几篇介绍了文件的方法openwith open,属性readwriteclose。下面是文件的其他属性。

1. f.tell(),返回文件当前位置

tell() 方法返回文件的当前位置,即文件指针指向位置, 决定了后续的读写操作。

  • r只读模式下,文件指针位置是0, 即文件的开头,读取所有内容后,文件指针位置是3, 即文件的末尾
  • a追加写入模式下,文件指针位置是7, 即文件的末尾,后面当然也读取不到任何内容
with open('file.txt', 'r') as f:
    print(f.tell())
    print(repr(f.read()))

with open('file.txt', 'a') as f:
    print(f.tell())
# testing
0
'Hello!\n'
7

2. f.seek(offset[, whence]),设置文件当前位置

  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

  • 如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1

with open('file.txt', 'a+') as f:
    print(f.tell())
    print(f.read())
    print(f.seek(0, 0))
    print(f.read())
    print(f.seek(4, 0))
    print(f.read())
# testing
50

0
The following functions operate on a history file.
4
following functions operate on a history file.

3. f.truncate( [ size ]),用于截断文件

  • 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除
  • 不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除
  • 返回截断的字节长度

注意:

  • 该方法需要写的模式才可使用, 否则上报错误UnsupportedOperation: File not open for writing
  • 文件的内容会被修改
with open('file.txt', 'r+') as f:
    print(f.read())
    f.seek(4, 0)
    print(f.truncate())
    f.seek(0, 0)
    print(f.read())

# testing
The following functions operate on a history file.
4
The 
4. f.flush(),用来刷新缓冲区的,直接把内部缓冲区的数据立刻写入文件

flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

In [98]: f = open('a.txt', 'w+')

In [99]: f.read()
Out[99]: ''

In [100]: f.write('qwert')
Out[100]: 5

In [101]: cat a.txt

In [102]: f.flush()

In [103]: cat a.txt
qwert
In [104]: f.close()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,753评论 0 6
  • 所有执行I/O操作的系统调用都以文件描述符(一个非负整数)来指代打开的文件。包括pipe,FIFO,socket,...
    loopppp阅读 676评论 0 0
  • 文件IO常用操作 一般说IO操作,指的是文件IO,如果指的是网络IO,会直接说。 把文件存储到磁盘上的这个过程,叫...
    vampire6阅读 1,092评论 0 0
  • 第三章 文件i/o 3.1引言 不带缓冲的io(unix系统在内核中设有缓冲区,这个不带缓冲意思是用户不自己缓冲)...
    m风满楼阅读 1,023评论 0 0
  • [转]C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以...
    天之道天知道阅读 5,227评论 0 7