すみません。基本的なところだと思うのですが、完全に嵌ってしまってるので、ご教授ください。
- checkKeywordディレクトリ内のテキストファイルを読み込む
- kwlist.txtを1行読んで、キーワードを取得する
- テキストファイルを1行ずつ最後まで読み込み、各行でキーワードが部分文字列になっていた場合、テキストファイルの該当行を出力する
- 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
というキーワードでhoge
とhogehoge
がヒットします。
最終的な成果物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なので、その辺りかな、と思い当たる点が出てきました。
回答3件
あなたの回答
tips
プレビュー