python文件指针_[Python笔记] 文件指针

说明

文件指针式指向当前字节的位置,当mode=r时,指针起始在0;mode=a时,指针起始位置在EOF。

tell()

tell()显示当前指针位置In [47]: f = open('test')

In [49]: f.tell()

Out[49]: 0

seek()

seek()移动文件指针的位置,offest设置偏移多少个字节,whence表示从哪里开始偏移。seek(offest[,whence])

文本模式下,whence取值范围及释义如下:

参数值释义whence0缺省值,表示从头开始,offest值只能是正整数

whence1表示从当前位置开始,offest值只接受0

whence2表示从EOF位置开始,offest值只接受0# 文本模式

In [62]: f = open('test4','r+')

In [63]: f.tell()

Out[63]: 0

In [64]: f.read()

Out[64]: 'addbsa 12323 \\nwqeqweqw\n'

In [65]: f.tell() # 获取当前文件指针位置

Out[65]: 24

In [67]: f.seek(0) # 设置文件指针为0,也就 从头开始

Out[67]: 0

In [68]: f.read() # 从新read就是从头开始读取

Out[68]: 'addbsa 12323 \\nwqeqweqw\n'

In [69]: f.seek(2,0) # 从EOF位置开始偏移2个字符位置

Out[69]: 2

In [70]: f.read()

Out[70]: 'dbsa 12323 \\nwqeqweqw\n'

In [71]: f.seek(2,1) # offest只接受0

---------------------------------------------------------------------------

UnsupportedOperation Traceback (most recent call last)

in

----> 1 f.seek(2,1)

UnsupportedOperation: can't do nonzero cur-relative seeks

In [72]: f.seek(2,2)

---------------------------------------------------------------------------

UnsupportedOperation Traceback (most recent call last)

in

----> 1 f.seek(2,2)

UnsupportedOperation: can't do nonzero end-relative seeks

In [73]: f.close()

# 中文

In [74]: f = open('test4','w+')

In [75]: f.write('连仕彤博客')

Out[75]: 5

In [76]: f.tell()

Out[76]: 15

In [77]: f.close()

In [78]: f = open('test4','r+')

In [79]: f.read(3)

Out[79]: '连仕彤'

In [80]: f.seek(1)

Out[80]: 1

In [81]: f.tell()

Out[81]: 1

In [82]: f.read()

---------------------------------------------------------------------------

UnicodeDecodeError Traceback (most recent call last)

in

----> 1 f.read()

~/.pyenv/versions/3.5.3/lib/python3.5/codecs.py in decode(self, input, final)

319 # decode input (taking the buffer into account)

320 data = self.buffer + input

--> 321 (result, consumed) = self._buffer_decode(data, self.errors, final)

322 # keep undecoded input until the next call

323 self.buffer = data[consumed:]

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

In [83]: f.seek(2)

Out[83]: 2

In [84]: f

Out[84]: <_io.TextIOWrapper name='test4' mode='r+' encoding='UTF-8'>

In [85]: f.close()

二进制模式下,whence取值范围及释义如下:

参数值释义whence0缺省值,表示从头开始,offest值只能是正整数

whence1表示从当前位置开始,offest值可正可负

whence2表示从EOF位置开始,offest值可正可负In [103]: f = open('test4','rb+')

In [104]: f

Out[104]: <_io.BufferedRandom name='test4'>

In [105]: f.tell() # 起始位置

Out[105]: 0

In [106]: f.read()

Out[106]: b'aaabbbccc'

In [107]: f.tell()

Out[107]: 9

In [108]: f.write(b'abc')

Out[108]: 3

In [109]: f.seek(0) # 起始位置

Out[109]: 0

In [110]: f.seek(2,1) # 从当前指针位置开始,向后2

Out[110]: 2

In [111]: f.read()

Out[111]: b'abbbcccabc'

In [112]: f.seek(-2,1) # 从当前位置开始,向前2

Out[112]: 10

In [113]: f.read()

Out[113]: b'bc'

In [114]: f.tell()

Out[114]: 12

In [115]: f.seek(2,2) # 从EOF位置开始,向后2

Out[115]: 14

In [116]: f.seek(0)

Out[116]: 0

In [117]: f.seek(-2,2) # 从EOF位置开始,向前2

Out[117]: 10

In [118]: f.tell()

Out[118]: 10

In [119]: f.read()

Out[119]: b'bc'

In [120]: f.seek(-20,2) # OSError

---------------------------------------------------------------------------

OSError Traceback (most recent call last)

in

----> 1 f.seek(-20,2)

OSError: [Errno 22] Invalid argument

In [121]: f.close()

二进制模式支持任意起点的便宜,从头、从未、从中间I之开始,向后seek可以超界,但是向前eek的时候,不能超界,否则抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值