【发布时间】:2016-08-09 07:30:28
【问题描述】:
嗨,我想在列表中保存所有包含“CREATE TABLE”的行的位置 a) 有没有更好更正确的方法呢? (我是 python 新手) b)为什么将tell用于迭代器很重要?我认为这是一种读取方法(或等效方法),因此只是告诉位置不应该损害文件迭代过程。
所以我有以下课程:
class SQLParser(object):
def __init__(self,filename):
self.file = open(filename,'r')
self.createTablePositions=[]
self.insertIntoPositions=[]
def findCreateTable(self):
for line in self.file:
if line.find("CREATE TABLE") is 0:
print(line)
self.createTablePositions.append(self.file.tell())
sqlhandler = SQLParser("sql.sql")
sqlhandler.findCreateTable()
print(sqlhandler.createTablePositions)
这会产生以下错误:“回溯(最近一次调用): 文件“C:/Users/user/PycharmProjects/sqlparser/sqlparser.py”,第 18 行,在 sqlhandler.findCreateTable() 在 findCreateTable 中的文件“C:/Users/user/PycharmProjects/sqlparser/sqlparser.py”,第 12 行 curPos = self.file.tell() OSError: 告诉位置被 next() 调用禁用"
我已经搜索了网络和 stackoverflow,但我没有找到直接解决我的问题的方法。 - 目前像重写 next() 方法这样的解决方案超出了我的知识范围,我怀疑这个练习的目的。
您的建议将得到高度评价!
【问题讨论】:
标签: file python-3.x