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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Python

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

Q&A

解決済

2回答

338閲覧

for構文を用いて複数のファイル内の同一名の変数を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/03/02 23:25

前提・実現したいこと

Pythonを使用してプログラムを書いております。
その中で、for構文を用いて複数のファイル内の同一名の変数を取得したいと考えています。
しかし、実行するとエラーメッセージが発生してしまいます。

python

1import glob 2files = glob.glob(/hogehoge/*.py') 3 4for file in files: 5 from file import CALLED_NAME 6 print(CALLED_NAME)

ファイル構成は次のとおりです

/hogehoge |---hoge1.py |---hote2.py |---hote3.py

hoge1~3の中身

python

1CALLED_NAME=["hoge","hoge"]

エラーメッセージ

from (file) import CALLED_NAME ^ SyntaxError: invalid syntax

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

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

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

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

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

guest

回答2

0

import文はそのような用途で利用できないので、代わりに標準ライブラリのimportlibを使用してください。

31.5. importlib — import の実装
https://docs.python.jp/3.6/library/importlib.html#module-importlib

import_module()関数
https://docs.python.jp/3.6/library/importlib.html#importlib.import_module

投稿2018/03/02 23:37

編集2018/03/02 23:39
yukkeorg

総合スコア985

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

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

退会済みユーザー

退会済みユーザー

2018/03/03 00:32 編集

ありがとうございます。 しかし、実行すると ---------------------------------------------------- Traceback (most recent call last): File "filename.py", line 51, in <module> m = importlib.import_module(file) File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked ImportError: No module named '/opt/robo/libs/hello' ----------------------------------------------------- というエラーが発生してしまいます。 どこに間違いがあるのでしょうか? ----------------------------------------------------- files = glob.glob('/hogehoge/*.py') # ワイルドカードが使用可能 for file in files: m = importlib.import_module(file) print(m.CALLED_NAME) -----------------------------------------------------
yukkeorg

2018/03/03 03:12 編集

ドキュメントにもありますが、import_moduleはimport文の実装部分となりますので、import文と同様にファイルパス指定によるインポートはできません。Pythonモジュールのサーチパス(sys.path)に読み込ませたいフォルダのパスを登録してから、import_module関数にモジュール名を指定してください。
guest

0

ベストアンサー

execを使用した別解。インポートするのではなく、名前空間を限定してモジュールを実行して、その名前空間に入ってくる情報を後から参照するイメージ。

>>> from glob import glob >>> glob("test/*.py") ['test\A1.py', 'test\A2.py', 'test\A3.py'] >>> for file in glob("test/*.py"): ... with open(file) as fp: ... ns = {} ... exec(fp.read(), ns) ... print("A=", ns["A"]) ... A= 1 A= 2 A= 3

投稿2018/03/03 03:32

編集2018/03/03 03:33
YouheiSakurai

総合スコア6142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問