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

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

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

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

Q&A

解決済

3回答

1167閲覧

部分文字列かどうかの判定について

Hayashi_Jelly

総合スコア26

Python 3.x

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

0グッド

0クリップ

投稿2018/11/27 06:08

編集2018/11/27 09:23

すみません。基本的なところだと思うのですが、完全に嵌ってしまってるので、ご教授ください。

  1. checkKeywordディレクトリ内のテキストファイルを読み込む
  2. kwlist.txtを1行読んで、キーワードを取得する
  3. テキストファイルを1行ずつ最後まで読み込み、各行でキーワードが部分文字列になっていた場合、テキストファイルの該当行を出力する
  4. 2に戻る

python

1import glob 2import sys 3import os 4 5CHECK_FILES_PATH = "checkKeyword*.txt" 6KWLIST_FILE = "kwlist.txt" 7OUT_FILE = "out.txt" 8 9def main(): 10 filelist = glob.glob(CHECK_FILES_PATH) 11 for FILE in filelist: 12 # with open(OUT_FILE, 'w') as write_file: 13 # 修正1openのモードを'w'ではループの度上書きされるのでaに修正 14 with open(OUT_FILE, "a") as write_file: 15 with open(KWLIST_FILE, 'r') as list_file: 16 with open(FILE, 'r') as check_file: 17 for keyword in list_file: 18 for line in check_file: 19 # if line in keyword: 20 # 修正1 keyword in lineの間違えのため修正 21 if keyword in line: 22 write_file.write(line) 23 check_file.seek(0,0) 24 25boolean = OUT_FILE in glob.glob("*") 26if boolean == True: 27 os.remove(OUT_FILE) 28main()

具体例

checkKeywordディレクトリにhoge.txtがあります。

hoge hogehoge fuga fugafuga piyo piyopiyo

kwlist.txtの内容は以下の通りです

hoge

この場合、hoge.txt内にはhogeというキーワードでhogehogehogeがヒットします。
最終的な成果物out.txtに

hoge hogehoge

を出力させるスクリプトを作成したいですが、上手くいきません。out.txtには何も出力されません。

備考

スクリプト最終行付近のif line in keyword: の挙動がよく分かりません。
keyword, lineは任意のものが取得できていると思います。
line in keyword を出力するとfalseを返しますが、かといってif line in keyword == False:と記述しても、任意の結果が得られません(全く出力されない)。

修正1後

ありがとうございます。具体例だと、通りました!(out.txtにhoge、hogehogeの行が出力された。)

実際に使いたい場面で、まだヒットしません。
(192.168.xxx.xxx/32のようなプライベートアドレスをキーワードにして、ヒットする行のその他の情報が欲しい)
文字コードとかpythonがutf-8で、kwlist.txtやチェックしたいファイルはshift-jisなので、その辺りかな、と思い当たる点が出てきました。

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

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

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

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

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

yamato_user

2018/11/27 06:24

もう少し詳しく、具体例を用いて、追加修正してください。何が何だかわかりません(´;ω;`)
guest

回答3

0

自己解決

自己解決しました。kwlist.txtに改行コードが混じってたため、ヒットしなかっただけでした。

投稿2018/11/28 10:44

Hayashi_Jelly

総合スコア26

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

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

0

Pythonなど不要。そう、シェル芸ならね!

bash

1$ grep -h -f kwlist.txt checkKeyword/*.txt > out.txt

投稿2018/11/27 11:01

hichon

総合スコア5737

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

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

Hayashi_Jelly

2018/11/28 10:41

この程度だと確かにそれ言っちゃうとそうですね。
guest

0

スクリプト最終行付近のif line in keyword: の挙動がよく分かりません。

if line in keyword:を具体値で考えるとif 'hogehoge' in 'hoge':となり
日本語だと「ほげ」のなかに「ほげほげ」が含まれているかとなります。
これが妥当かを考えてみてください。

を出力させるスクリプトを作成したいですが、上手くいきません。out.txtには何も出力されません。

比較対象ファイル毎に出力ファイルをゼロから作り直していますが、意図した動作ですか?

投稿2018/11/27 07:46

can110

総合スコア38262

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

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

Hayashi_Jelly

2018/11/27 07:57

ご指摘ありがとうございます。仰るとおりです。 - `with open(OUT_FILE, 'a')`に変更 - `if keyword in line:` しかし、まだ動きません・・・
can110

2018/11/27 08:05 編集

どう「動いていない」のでしょうか?何等か動いているはずです。 その詳細を質問本文に追記ください。 また、上記のとおり修正した意図も説明ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問