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

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

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

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

Q&A

解決済

2回答

375閲覧

Pythonの関数に関する質問

RarigoB

総合スコア26

Python 3.x

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

0グッド

0クリップ

投稿2018/04/24 03:57

編集2018/04/24 04:02

環境
Python3.5.2

文字列の抽出をするプログラムを制作しているんのですが、Pythonの関数の基本をしっかり押さえていなかったせいで、いまいち想像しているプログラムを制作できません。

Python

1import re 2 3list1 = ['5/1:hogehoge町:hogehoge大会','5/2:hogehoge町:hogehoge大会','5/3:hogehoge町:hogehoge大会','5/4:hogehoge町:hogehoge大会', 4'5/5:hogehoge町:hogehoge大会'] 5 6def get_content(self,list1): 7 for content in list1: 8 pass 9 10 11 12def parse_content(): 13 pass 14

list1は例としてのイベントのスケジュールが格納されたリストです。
自分の理想としては、list1にある要素をget_content関数で1つずつ抜き出し、その要素から日付や開催場所,
要素の内容は、parse_content関数で正規表現を使って解析したいのですが、get_content関数で得た値をparse_contentでも扱う方法がわかりません。

実現したいこと
get_content関数で、リストの要素を一つずつ抜き出し、その抜き出した要素を一つずつ、parse_infoで正規表現などで解析できるようにしたいです。正規表現などはマスターしているので、ある関数で得た値を別の関数でも扱う方法を教えてください。

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

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

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

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

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

guest

回答2

0

list1にある要素をget_content関数で1つずつ抜き出し、

ここにわざわざ専用の関数を用意する理由がわかりません。
parse_content()の引数としてlist1を指定し、parse_content()の中で正規表現なりなんなり使って対象リストを処理すればいいだけではないでしょうか。

投稿2018/04/24 04:45

KojiDoi

総合スコア13671

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

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

RarigoB

2018/04/24 05:02

そのとおりなのですが、これは例みたいなもので、実際に今制作したいのはWebページのスクレイピング処理で、HTMLのboxを取得し、そのboxのなかのboxを解析するのに、多重ループを使うとうまく抜けられないので、box解析のための関数を作成しようと考えました。説明不足ですいません。
guest

0

ベストアンサー

素直に考えれば、parse_content関数の引数として渡せば良さそうに思います。

投稿2018/04/24 04:11

hayataka2049

総合スコア30933

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

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

RarigoB

2018/04/24 04:22

こんなかんじでしょうか import re list1 = ['5/1:hogehoge町:hogehoge大会','5/2:hogehoge町:hogehoge大会','5/3:hogehoge町:hogehoge大会','5/4:hogehoge町:hogehoge大会', '5/5:hogehoge町:hogehoge大会'] def get_content(list1): for content in list1: parse_content(content) def parse_content(content): get_day = re.search(r'5/1',content) print(get_day.group(0))
RarigoB

2018/04/24 04:23

なにも表示されませんでした
hayataka2049

2018/04/24 04:28 編集

トップレベルに関数の呼び出しを追加してあげてくださいな get_content(list1)
RarigoB

2018/04/24 04:29

どこに追加すればいいでしょうか。無知ですいません
hayataka2049

2018/04/24 04:31

上のコメントのプログラムの一番下の行にインデントなしで追加、です インデントをアンダーバーで代替したコードを貼ります import re list1 = ['5/1:hogehoge町:hogehoge大会','5/2:hogehoge町:hogehoge大会','5/3:hogehoge町:hogehoge大会','5/4:hogehoge町:hogehoge大会', '5/5:hogehoge町:hogehoge大会'] def get_content(list1): __for content in list1: ____parse_content(content) def parse_content(content): __get_day = re.search(r'5/1',content) __print(get_day.group(0)) get_content(list1)
RarigoB

2018/04/24 04:35

組み込み例外が出てしまいました
hayataka2049

2018/04/24 04:41

私の手元でも出ていますね。 5/1 Traceback (most recent call last): File "program_file.py", line 16, in <module> get_content(list1) File "program_file.py", line 8, in get_content parse_content(content) File "program_file.py", line 14, in parse_content print(get_day.group(0)) AttributeError: 'NoneType' object has no attribute 'group' リストの二番目の要素の'5/2:hogehoge町:hogehoge大会'から"5/1"にマッチするものを探そうとして、見つからないのでNoneを返したのだけどそのNoneにgroupを呼んだので、というエラーのようですが 出ているのはこの例外ですか? それなら正常な動作だと思いますよ
RarigoB

2018/04/24 04:45

正規表現を直したら、正常に動作しました。 ありがとうございます
RarigoB

2018/04/24 04:54

もうひとつ聞きたいのですがselfが引数に入っている場合はなにか変わりますか?呼び出しなど
hayataka2049

2018/04/24 05:03

クラスのインスタンスメソッドになるということですか? インスタンスメソッド同士はself経由でアクセスする必要があります。 なので、呼び出し方がself.parse_contentになります。
RarigoB

2018/04/24 05:05

ありがとうございます。 self.parse_content(list1) となって、 get_contentを呼び出しのほうはどうなるのでしょうか?
hayataka2049

2018/04/24 05:11

いえ、self.parse_content(content)です get_contentの方は、前の質問を見た限りだとspiderで呼び出されるメソッドがあると思うので、そこから呼び出すなり、うまく機能をまとめるなりすれば良いのではないでしょうか
RarigoB

2018/04/24 05:12

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問