|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看“零基础入门学习Python”中的“第029讲:文件:一个任务”之前,自己编了一段程序实现这一讲视频中的任务,程序代码如下:
f = open('record.txt')
endpos = f.seek(0, 2)
f.seek(0, 0)
count = 0
str_fb = ''
str_fg = ''
while f.tell() != endpos:
if f.tell() > 1000:
pdb.set_trace()
str_eachline = f.readline()
if str_eachline.startswith('小甲鱼:'):
str_fb += str_eachline[4:]
if str_eachline.startswith('小客服:'):
str_fg += str_eachline[4:]
if str_eachline.startswith('=') or f.tell() == endpos:
count += 1
filename_fbcount = 'boy_' + str(count) + '.txt'
filename_fgcount = 'girl_' + str(count) + '.txt'
fb = open(filename_fbcount, 'w')
fg = open(filename_fgcount, 'w')
fb.write(str_fb)
fg.write(str_fg)
fb.close()
fg.close()
str_fb = ''
str_fg = ''
f.close()
程序一运行,boy_1.txt、boy_2.txt、girl_1.txt、girl_2.txt都按照要求正确实现生成了,但是boy_3.txt、girl_3.txt没有生成,并且还报出如下程序错误:
Traceback (most recent call last):
File "***(程序文件名).py", line 44, in <module>
str_eachline = f.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xd0 in position 0: incomplete multibyte sequence
反复检查程序代码,一直找不出问题出在什么地方。之后用pdb进行了调试,发现问题出在程序中“str_eachline = f.readline()”读完原始文件“record.txt”倒数第二句之后,文件指针跳到下一行(最后一行)之后还往后进了一位(f.tell()=1111),而不是预计的下一行(最后一行)的最开始位置f.tell()=1110,因此导致了读取最后一行时程序异常
之后又用shell试了一下,将指针指到倒数第二行最开始位置(f.tell()=1053),读取之后发现指针又能正常跳到下一行(最后一行)的最开始位置f.tell()=1110,并且最后一行接下来也能正确读取
上网搜索了下,一直没有找到此问题的症结在哪里
前后折腾了好久,是不是readline()还有我们不知道的坑啊?求各位大牛解答~
|
|