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

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

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

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

Python

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

Q&A

解決済

2回答

4214閲覧

pythonにて複数のファイルに存在するテキストの文字列を一抽出したい

n0x

総合スコア2

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/10/23 08:16

前提・実現したいこと

◆ご挨拶
python初心者でございます。拙い文章・質問ではございますが、
よろしくお願い申し上げます。

◆実現したいこと
複数のファイルから、テキストに含まれている任意の文字列を抽出したいです。(列ごと)

◆実現したい例
以下の環境より、複数のファイルに存在する、orangeとcherryが含まれた行を
新規ドキュメントであるddd.txtに書き出したい
(可能であればで良いのですが、どのフォルダのどのテキストから抜き出したかがわかるのが理想です。)

◇環境例
●ディレクトリ例
| |--dirA----aaa.txt
| dir0--|
| | |--dirB----bbb.txt
| |.
| |.
| |--------------ccc.txt

 ●テキスト例
[aaa.txt]
apple
orange_juice
cherry

[bbb.txt]
orange
TV
radio

[ccc.txt]
orange is good
baby
cherry boy

●処理実行後
[ddd.txt]
(aaa.txt)
orange_juice
cherry
(bbb.txt)
orange
(ccc.txt)
orange is good
cherryboy

◆あとがき
自分でもいろいろと調べてみたのですが、やり方はおろか、
本当にこんなことができるのかすらもわからない状態です。

もう少し、実現したいことがあるのですが、この先は自信の力で
やってみたく存じますので、本件よろしくお願い申し上げます。

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

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

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

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

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

meg_

2020/10/23 08:39

テキストファイルを開いてテキストを読み込むコードを書くことは出来ますか? ※今のままでは「丸投げ」なので回答は付きにくいでしょう。
hentaiman

2020/10/23 09:57

丸投げしか出来ない人のテキストエディタ等のソフトウェアあり、それらには大抵文字変換機能が組み込まれているので、そういったものを使いましょう 自身の能力に見合った方法を選択するのも手段の一つです それでも丸投げしないのなら有料で請け負ってくれる人が多数いますのでそちらをあたりましょう
guest

回答2

0

ベストアンサー

実装例です。
文法を学んだあとは、組み込み関数標準ライブラリの一覧をざっと見ておくと見当をつけやすくなりますよ。

python

1from operator import attrgetter 2from pathlib import Path 3 4input_dir = Path('path/to/dir') 5output_file = Path('ddd.txt') 6words = 'orange', 'cherry' 7 8with output_file.open('w') as stream: 9 for path in sorted(input_dir.glob('**/*.txt'), key=attrgetter('name')): 10 lines = [] 11 for line in path.read_text().splitlines(): 12 if any(word in line for word in words): 13 lines.append(line) 14 15 stream.write(f'({path.relative_to(input_dir)})\n') 16 stream.write('\n'.join(lines)) 17 stream.write('\n') 18 19print(output_file.read_text()) 20# (dirA\aaa.txt) 21# orange_juice 22# cherry 23# (dir0\dirB\bbb.txt) 24# orange 25# (ccc.txt) 26# orange is good 27# cherry boy

投稿2020/10/23 16:20

編集2020/10/23 16:32
copepoda

総合スコア324

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

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

0

具体的に質問内容に記載しているやりたい事のうち、どこがわからないという事なのか不明だった為
ファイル操作など基本的な操作はできる前提で解説させていただきます。

osモジュールを使用しカレントディレクトリ内に存在する全てのフォルダ・ファイルを走査し検証していきます。
for文でファイルを1つずつ検証していき、拡張子が**.txt**であるかどうかを調べ
真偽値がTrueだった場合リストに追加するという流れでフォルダ内全てのテキストファイルを取得できます。

あとは各テキストファイルの内容を取得していき
新しくddd.txtというファイルに統合していけばよいのではないでしょうか。

python

1import os 2 3file_list = [] 4# カレントディレクトリ内の全てのファイルとフォルダを走査 5for root, dirs, files in os.walk(os.getcwd()): 6 # ファイルを1つずつ検証 7 for file in files: 8 # ファイル名と拡張子に分割 9 name, extension = os.path.splitext(file) 10 # 拡張子が.txtだった場合に絶対パスをfile_listに追加 11 if extension == '.txt': 12 file_list.append(os.path.join(root, file))

投稿2020/10/23 11:09

編集2020/10/23 11:11
nto

総合スコア1438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問