こんにちはリスト内に「CREATE TABLE」を含むすべての行の位置を保存します。 a)より適切な方法ですそれ? (私はPythonの初心者です) b)iteratorにtellが使用されているのはなぜですか?私はそれが読み込み方法(または同等のもの)だと思ったので、ファイルの反復処理を傷つけてはいけないと言っています。python 3:forループでファイル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を」 sqlhandler.findCreateTable() ファイルの行18、 "C:/Users/user/PycharmProjects/sqlparser/sqlparser.py"、ライン12、findCreateTableで curPos = self.file.tell() OSErrorの:占いnext()コールで無効になった位置 "
私はネットとstackoverflowをイアリングが、私は私の問題に直接解決策を見つけることができませんでした。 - 現在の解決策はnext()メソッドを書き換えることですが、私の知るところではありません。私はこのエクササイズがそれを目指しているのか疑問です。
あなたのアドバイスは非常にappriciatedされてくださいしてください!
こんにちは私は特定の言葉を取って、別のファイルでそれらを言い換えるためにcharatersの量が必要ですが、その方向は私が推測されます。 – LiorA
hiyaおかげさまで、まずは、ファイルを閉じることに関しては正しいですが、クラスを終了していないので、最後にやることでした(btwはC++のようなものではありません - オブジェクトのデストラクタdoesnそれ自体では扱いませんか?)。 1つの最後の質問ファイル内の行16に移動する方法を教えてください。もしあなたがそれに答えることができれば(それはPythonのドキュメントで見つけようとしています)、それはすごいでしょう! (そのため、後でseek()を使うことができるようにtell()が必要なのです) – LiorA
jumping lines:[linecache](https://docs.python.org/3.5/library/linecache。html) – Mixone