質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1856閲覧

Python3の対話モードで関数が読み込めない件について(ディレクトリの指定問題??)

hiroki-t

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/07 08:49

前提・実現したいこと

エンジニアに転職を目指して、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

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/06/07 11:48

Udemyならおそらく有料の講座ですよね?レクチャー通りにやって上手く動作しないのであれば口座のQ&Aを確認したり質問投稿した方が良いのではないでしょうか?
guest

回答1

0

ベストアンサー

エラーメッセージ:No module named 'app'より、ディレクトリの階層の指定に問題があるのかと考え、「from assets~」を「from app.assets.~」のように修正。

というのを行ったときのカレントディレクトリはどこだったのでしょうか。

カレントディレクトリが変わると、指定の方法も変わってきます。

python

1import os 2print(os.getcwd())

を実行してその結果を見て下さい。

また、今、問題が起きているときのカレントディレクトリも確認してください。

また、Pythonでは、多くの場合にカレントディレクトリを含むあらかじめ設定されたディレクトリからimportするモジュールやパッケージを探します。
指定されているディレクトリは以下で分かります。

python

1import sys 2print(sys.path)

投稿2021/06/07 09:08

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroki-t

2021/06/07 09:23

早速のご回答ありがとうございました。 アドバイスいただいた通り、2つの確認を行いました。 ①「import os」の結果 C:\Users\ta\Desktop\work\Dash>\app> が返ってきました。これは、現在のカレントディレクトリはappという理解でよろしいでしょうか。 ②「import sys」の結果。 これが、すごい長くなっていたのですが。次のようなものが返ってきました。 ['c:\Users\ta\Desktop\work\Dash', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\DLLs', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\lib', 'C:\Users\ta\AppData\Local\Programs\Python\Python39', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\lib\site-packages', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\lib\site-packages\win32', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\lib\site-packages\win32\lib', 'C:\Users\ta\AppData\Local\Programs\Python\Python39\lib\site-packages\Pythonwin'] このような形なのですが、なにか分かりますでしょうか。
ppaul

2021/06/07 14:05

C:\Users\ta\Desktop\work\Dash>\app> の'>'が謎です。 確認したいのですが、対話モードというのはどこでの実行を意味していますか。 コマンドプロンプトとかPowerShellでの話をしているのか、それともVScodeでの話をしているのかを聞いています。それらが違うと、カレントディレクトリも違いますので、どれかでの結果がどこでも同じだと考えておられると、問題点がわかりません。これはsys.pathの方も同様です。
hiroki-t

2021/06/07 15:53

遅くにすみません。 対話モードというのは、VScode上で開いているターミナルを開き、PowerShellを選択して「Python3」と入力して実行しています。 先の解答は、そこで実行した際の結果となっています。
hiroki-t

2021/06/08 01:21

あれから、自分でもさらに調べてみてやってみたところ、うまく先に進めることができました。 まだまだ理解が及ばない所もありますが、ひたむきに頑張ります。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問