FI = open("rara.txt",'rb')
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
cnt = 0
for line in FI:
cnt += 1
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
if cnt==4:
break
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell(),'\n'
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell()
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
for line in FI:
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell(),'\n'
结果是
'1AA\r\n' len==5 FI.tell() after FI.readline() : 5
cnt==1 '2BB\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==2 '3CC\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==3 '4DD\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==4 '5EE\r\n' len==5 FI.tell() after 'line in FI' : 75
FI.tell() after iteration 'for line in FI' : 75
Traceback (most recent call last):
File "E:\Python\NNN codes\esssssai.py", line 16, in <module>
lineR = FI.readline()
ValueError: Mixing iteration and read methods would lose data
FI = open("rara.txt",'rb')
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
cnt = 0
for line in FI:
cnt += 1
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
if cnt==4:
pos = FI.tell()
break
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell(),'\n'
FI.seek(pos)
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell()
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
for line in FI:
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell(),'\n'
结果
'1AA\r\n' len==5 FI.tell() after FI.readline() : 5
cnt==1 '2BB\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==2 '3CC\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==3 '4DD\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==4 '5EE\r\n' len==5 FI.tell() after 'line in FI' : 75
FI.tell() after iteration 'for line in FI' : 75
'' len==0 FI.tell() after FI.readline() : 75
'' len==0 FI.tell() after FI.readline() : 75
FI.tell() after iteration 'for line in FI' : 75
FI = open("rara.txt",'rb')
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
cnt = 0
pos = FI.tell()
for line in FI:
cnt += 1
pos += len(line)
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
if cnt==4:
break
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell()
print " pos after iteration 'for line in FI' : ",pos,'\n'
FI.seek(pos)
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell()
lineR = FI.readline()
print repr(lineR)+' len=='+str(len(lineR))+\
' FI.tell() after FI.readline() : ',FI.tell(),'\n'
cnt = 0
for line in FI:
cnt += 1
print 'cnt=='+str(cnt)+' '+repr(line)+' len=='+str(len(line))+\
" FI.tell() after 'line in FI' : ",FI.tell()
print "\nFI.tell() after iteration 'for line in FI' : ",FI.tell(),'\n'
结果
'1AA\r\n' len==5 FI.tell() after FI.readline() : 5
cnt==1 '2BB\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==2 '3CC\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==3 '4DD\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==4 '5EE\r\n' len==5 FI.tell() after 'line in FI' : 75
FI.tell() after iteration 'for line in FI' : 75
pos after iteration 'for line in FI' : 25
'6FF\r\n' len==5 FI.tell() after FI.readline() : 30
'7GG\r\n' len==5 FI.tell() after FI.readline() : 35
cnt==1 '8HH\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==2 '9II\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==3 '10j\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==4 '11k\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==5 '12l\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==6 '13m\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==7 '14n\r\n' len==5 FI.tell() after 'line in FI' : 75
cnt==8 '15o\r\n' len==5 FI.tell() after 'line in FI' : 75
FI.tell() after iteration 'for line in FI' : 75
不,it isn't safe:
您可以使用
next()
跳过这里的第一行。您还应该测试StopIteration
,如果文件为空,则会引发此问题。从长远来看,这是可行的。它忽略了正在处理文件的事实,并且可以处理任何序列。另外,使用显式迭代器对象(
rdr
)可以跳过for循环体中的行,而不会弄乱任何东西。如果机械装置在控制之下是安全的。
一、二、二、三
是的。
在readline()指令之后执行迭代没有问题
但是有一个函数在迭代之后执行
我用此文本创建了一个“rara.txt”文件(每行的长度为5,因为Windows下的“行尾”是“\r\n”)
然后我处决了
结果是
是的。
奇怪的是,如果我们通过tell()更新“cursor”,则方法readline()在迭代之后可以再次激活(我不知道“cursor”更新的幕后机制是什么):
结果
无论如何,我们注意到,即使算法在迭代期间只读取4行(由于计数cnt),光标从迭代的最开始就已经在文件的末尾:在迭代开始时,位于当前位置之前的所有文件都是一次读取。
因此pos=FI.tell()在中断之前不给出读取4行后的位置,而是给出文件结尾的位置。
是的。
如果我们想在一次迭代之后从4行读数结束的精确点再次readline()执行特殊操作:
结果
是的。
所有这些操作都是可能的,因为文件是以二进制模式打开的,因为我在使用'\r\n'作为行尾来写入文件的Windows上,即使命令它(以'w'模式)写入类似'abcdef\n'的内容
另一方面,Python转换(在模式'r')中的所有'\r\n'。
这真是一团糟,要控制这一切,如果我们想进行精确的操作,必须在“rb”中打开文件。
是的。
你知道吗?我喜欢这些文件位置的游戏
相关问题 更多 >
编程相关推荐