我有一个大文件,我想从我在for循环中结束的那一行开始。
def ip_to_land(whatIP, startline):
with open("cord.csv") as csvfile:
# 100640 total lines
readCSV = csv.reader(csvfile, delimiter = ",")
for row in readCSV:
IP_LOW = IPAddress(row[0])
IP_HIGH = IPAddress(row[1])
Land = row[2]
start_line += 1
if IPAddress(whatIP)>=IP_LOW and IPAddress(whatIP)<=IP_HIGH:
return Land, row[3], row[4], start_line
readCSV.seek(start_line)
break
这可能吗?
答案 0 :(得分:2)
假设readCSV
是一个可供阅读的文件,而不是csv.reader
(不可搜索),您会寻找字节偏移,而不是行偏移。
所以,请使用例如
start_line = readCSV.tell()
以后能够回到同一地点。
文件的tell
方法返回您要读取的字节偏移量。正如https://docs.python.org/2.4/lib/bltin-file-objects.html上的文档所说,如果您使用的是Windows,则可能需要以模式rb
(读取二进制文件)打开该文件,以确保tell
和seek
正常工作根据需要(否则可能存在阻碍正常操作的行结束转换)。
答案 1 :(得分:0)
这可能会有所帮助。我假设readCSV是文件所有行的列表。
readCSV= open('filename.CSV').readlines() #list of all the lines in file
for row in range(len(readCSV)):
if something:
#your code
break
print readCSV[row+1]
如果退出循环时row
说33,则print
调用将打印行列表中的下一行。