前提・実現したいこと
エンジニアに転職を目指して、3カ月目です。予備知識というか、基本的な知識もまだまだ不十分なところがあり、絶賛勉強中です。
Udemyの講座で、スクレイピングの可視化アプリケーションを作成しています。講義の内容の通りに進めてきたのですが、Python3の対話モードで、必要な関数を読み込もうとしたところ、「SyntaxError: invalid syntax」が表示されてしまいました。
対話モードでやろうとしている流れは、次の通りです。
①DBの初期化に必要な関数を読み込む
②初期データ(前日まで保存してきたcsvデータ)を取得する関数を読み込む
③初期化を行う
④初期データを読み込む
①の時点で、エラーが起きています。
元のコードを見てみると、必要なモジュールをimportするところでもエラーが見られました。
もしかすると、ファイルの指定の方法に問題があるかも知れないと色々調べましたが、試した方法では解決できませんでした。
Python3の対話モードで、無事に関数を読み込んで④まで到達するために、どうしたらよいのかアドバイスください。
発生している問題・エラーメッセージ
Python3の対話モードで次の内容を入力
from assets.database import init_db
出力されるエラー文
from app.assets import database ModuleNotFoundError: No module named 'app'
該当のソースコード①
読み込みたい関数が入っているファイル。
database
1# coding: utf-8 2from sqlalchemy import create_engine 3from sqlalchemy.orm import scoped_session, sessionmaker 4from sqlalchemy.ext.declarative import declarative_base 5import pandas as pd 6import datetime 7import os 8 9databese_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'data.db') 10engine = create_engine('sqlite:///' + databese_file, convert_unicode=True , echo=True) 11db_session = scoped_session( 12 sessionmaker( 13 autocommit = False, 14 autoflush = False, 15 bind = engine 16 ) 17 ) 18Base = declarative_base() 19Base.query = db_session.query_property() 20 21def init_db(): 22 import assets.models 23 Base.metadata.create_all(bind=engine) 24 25def read_data(): 26 from assets import models 27 df = pd.read_csv('assets/data.csv') 28 for index, _df in df.iterrows(): 29 date = datetime.datetime.strptime(_df['date'], '%Y/%m/%d').date() 30 row = models.Data(date=date, subscribers=_df['subscribers'], reviews=_df['reviews']) 31 db_session.add(row) 32 db_session.commit()
該当のソースコード②
init_dbで参照したいmodelsのコード
models
1from sqlalchemy import Column, Integer, String, Boolean, DateTime, Date 2from assets.database import Base 3from datetime import datetime as dt 4 5#Table情報 6class Data(Base): 7 #TableNameの設定 8 __tablename__ = "data" 9 #Column情報を設定する 10 id = Column(Integer, primary_key=True) 11 date = Column(Date, unique=False) 12 subscribers = Column(Integer, unique=False) 13 reviews = Column(Integer, unique=False) 14 timestamp = Column(DateTime, default=dt.now()) 15 16 def __init__(self, date=None, subscribers=None, reviews=None, timestamp=None): 17 self.date = date 18 self.subscribers = subscribers 19 self.reviews = reviews 20 self.timestamp = timestamp 21
試したこと
試したことは次の通りです。
検証.エラーメッセージ:No module named 'app'より、ディレクトリの階層の指定に問題があるのかと考え、「from assets~」を「from app.assets.~」のように修正。
※ちなみに、ディレクトリの状況は次のような形になっています。
DASH └app ┬ assets┬__init__.py | └data.csv | └database.py | └models.py | └sqldiff.exe | └sqlite3_analyzer.exe | └sqlite3.def | └sqlite3.dll | └sqlite3.exe | ├ scraping.py └ view.py
結果.ところどころで表示されていたエラーメッセージは消えたものの、対話モードで試しても次のようなメッセージが返ってくる。
Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'app'
補足情報(FW/ツールのバージョンなど)
使っているツール:VScode
Python/ 3.9.5
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー