🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

3322閲覧

連続した処理であるPythonモジュールの呼び出し方

salmonosushi

総合スコア19

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2021/02/05 09:43

編集2021/02/05 09:44

Pythonで、
別のプログラム言語で作ったCSVファイルがあって、
CSVファイルをDBに登録するImportDb.pyを作りました。

CSV作成もPythonで行うことになり、
CreateCsv.pyを追加で作りました。

CreateCsv.py→ImportDb.pyの順番で処理を行いです。

CreateCsv.pyの中でImportDb.pyを呼び出そうかと思いましたが、以下のように作ると、
Importと記述したところですでにImportDb.pyが実行され、
順番がImportDb.py→CreateCsv.pyになると思います。

python

1# CreateCsv.py 2import ImportDb 3 4#CSVを出力する処理 5print('csv') 6#ImportDb.py呼び出し 7ImportDb

こういうときは、別の.pyファイルを作って、順番にふたつをimportしていったら、
CreateCsv.py→ImportDb.pyになりますか?

python

1# もう一つ作ったPythonファイル.py 2import CreateCsv 3import ImportDb 4

けどこれだとimportだけ書いてあるPythonファイルができるのは、
見た目が悪いのではと思っています。

一番きれいに書ける方法がありますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

importしたファイルは、トップレベルの処理がimport時に実行されますが、一般的に、モジュールとして呼び出されるファイルはトップレベルで実行される処理を含みません。

以下のファイルはimport時に「インポートされました」と表示します。

python

1print('インポートされました')

処理を任意のタイミングで任意の回数実行したい、あるいは不要であれば実行したくない場合処理は関数として書いておきます。

python

1 2def print_hello(x): 3 print(f'こんにちは{x}さん。')

ですがこれだと、このファイルを実行したときに何も起きなくなってしまいます。
このような場合に使える仕組みが

python

1if __name__ == "__main__":

です。見たことあると思います。
この if文の中の処理は、このファイルをスクリプトとして読んだときだけ実行されるようになります。
なので、

python

1 2def print_hello(x): 3 print(f'こんにちは{x}さん。') 4 5if __name__ == "__main__": 6 name = input('おなまえは? :").rstrip() 7 print_hello(name)

のようにすると、モジュールとしてimportしたときには、中のprint_hello関数が使えるようになり、スクリプトとして実行すると、名前を入力すると挨拶してくれるようななります。

ここのところは、pythonスクリプトの基本なので、調べてみてよく理解したほうがいいと思います。

質問の場合「csvを作る関数」と「dbに登録する関数」を作って、ファイルに書いておき、importしたファイルでその関数を順に呼べばいいということになります。
また、たとえば、csvを作る関数が作ったcsvのパスを返すようにして、それをdbに登録する関数に渡すようにするなど、よりよい実装にすることもできるでしょう。


他の方の回答を見て追記

今ある処理を関数化するのは難しいということであれば、他のスクリプトで制御するという手もありますね。これはpythonだとやりにくいので、windowsであればbatたpsファイルで、linuxであればシェルスクリプトでというのはよくやる手ですね。

投稿2021/02/05 10:05

編集2021/02/05 11:16
TakaiY

総合スコア13765

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

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

salmonosushi

2021/02/08 00:52

基本的なところからありがとうございます。 助言していただいた通り、関数化を試してみます。
guest

0

pythonには、作ったプログラムを再利用するための方法が三つあります。関数定義とクラス定義とモジュールです。

関数の使い方

関数を呼び出す時には関数名のあとにカッコを付けて呼び出します。
例えばprintというのは関数なので、print('Hello')のように使います。

クラスの使い方

クラス定義は複数の関数(メソッドと呼びます)や定数の定義やその他の機能をまとめたものです。
クラスの例はlistとかintです。クラスの使い方はいろいろありますが、たとえばlist()というように呼び出すと、[]を作り出します。
モジュールは一つのファイルやフォルダの中の複数のファイルです。(そうではないモジュールもありますが、もっとpythonに詳しくなってから調べてください)。モジュールを使うときはimportを使います。

モジュール

モジュールは、pythonに付属しているtkinterなどの標準ライブラリや、numpy、pandasなどの外部ライブラリを提供するために作られた機能です。そのために、一度読み込んだモジュールはもう一度読もうとしても、実際には読み込まないというように作られています。そのために、モジュールの中身の大半は関数定義やクラス定義であって、その関数やクラスを何度も使うようになっています。一回だけ実行されるのは初期化などの機能です。

まず関数定義、次にクラス定義を使いこなせるようになることをお勧めします。importを使ったモジュールの利用は、関数定義を使えるようになってからにしましょう。

投稿2021/02/05 11:05

ppaul

総合スコア24670

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

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

salmonosushi

2021/02/08 00:57

ご回答ありがとうございます。 何が分かっていないのか分からなかったので、そのあたりの学習も順番に進めていきたいと思います。 助言いただいた通り、まずは関数にするように修正してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問