Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで複数のドキュメント形式(CSV、テキスト、MS Word)の文字列をスキャンする方法は?


問題..

特定のキーワードを検索するために、さまざまな形式のファイルでいっぱいのディレクトリがあるとします。

準備中..

以下のパッケージをインストールしてください。

1. beautifulsoup4

2. python-docx

方法...

1.CSV形式の文字列を検索する関数を記述します。 csv.readerモジュールを使用してファイルを調べ、文字列を検索し、見つかった場合はTrueを返します。それ以外の場合はFalseを返します。

def csv_stringsearch(input_file, input_string):
"""
Function: search a string in csv files.
args: input file , input string
"""
with open(input_file) as file:
for row in csv.reader(file):
for column in row:
if input_string in column.lower():
return True
return False

2.テキストファイルを検索する機能。エンコーディングを処理する必要があるため、これは少し注意が必要です。何千ものエンコーディングがあり、エンコーディング形式を決定することはおそらく最も難しい部分です。もちろん、テキストファイルを作成したユーザーに戻ることもできますが、正しく自動化しています。

したがって、UnicodeDammitを使用してエンコーディングを決定します。

def text_stringsearch(input_file, input_string):
"""
Function: search a string in text files.
args: input file , input string
"""
with open(filename, 'rb') as file:
content = file.read(1024)

guessencoding = UnicodeDammit(content)
encoding = guessencoding.original_encoding

# Open and read
with open(input_file, encoding=encoding) as file:
for line in file:
if input_string in line.lower():
return True

return False

3.MSWord文書内の文字列を検索する機能。

def MSDocx_stringsearch(input_file, input_string):
"""
Function: search a string in MS Word documents.
args: input file , input string
"""
doc = docx.Document(input_file)
for paragraph in doc.paragraphs:
if input_string in paragraph.text.lower():
return True
return False

4.ここで、ファイルをループし、対応する関数を文字列で呼び出して検索するmain関数が必要です。ここでは、検索するコードと入力ファイルが同じディレクトリにあると仮定します。ディレクトリが別の場所にある場合は、パスパラメータを追加できます。

def main(input_string):
"""
Function: Open the current directory and search for a string in all the files
args: input string
"""
for root, dirs, files in os.walk('.'):
for file in files:

# Get the file extension
extension = file.split('.')[-1]

if extension in function_maps:
search_file = function_maps.get(extension)
full_file_path = os.path.join(root, file)

if search_file(full_file_path, input_string):
print(f' *** Yeah String found in {full_file_path}')

5.辞書を作成して、関数をファイル拡張子にマッピングします。

EXTENSIONS ={
'csv': csv_stringsearch,
'txt': text_stringsearch,
'docx': MSDocx_stringsearch,
}

6.すべてをまとめます。

import os
import argparse
import csv
import docx
from bs4 import UnicodeDammit


def csv_stringsearch(input_file, input_string):
"""
Function: search a string in csv files.
args: input file , input string
"""
with open(input_file) as file:
for row in csv.reader(file):
for column in row:
if input_string in column.lower():
return True
return False


def MSDocx_stringsearch(input_file, input_string):
"""
Function: search a string in MS Word documents.
args: input file , input string
"""
doc = docx.Document(input_file)
for paragraph in doc.paragraphs:
if input_string in paragraph.text.lower():
return True

return False

def text_stringsearch(input_file, input_string):
"""
Function: search a string in text files.
args: input file , input string
"""
with open(input_file, 'rb') as file:
content = file.read(1024)

guessencoding = UnicodeDammit(content)
encoding = guessencoding.original_encoding

# Open and read
with open(input_file, encoding=encoding) as file:
for line in file:
if input_string in line.lower():
return True

return False

def main(input_string):
"""
Function: Open the current directory and search for a string in all the files
args: input string
"""
for root, dirs, files in os.walk('.'):
for file in files:

# Get the file extension
extension = file.split('.')[-1]

if extension in function_mapping:
search_file = function_mapping.get(extension)
full_file_path = os.path.join(root, file)

if search_file(full_file_path, input_string):
print(f' *** Yeah String found in {full_file_path}')

function_mapping = {
'csv': csv_stringsearch,
'txt': text_stringsearch,
'docx': MSDocx_stringsearch,
}

if __name__ == '__main__':
string_to_search = 'Hello'
print(f'Output \n')
main(string_to_search.lower())

出力

*** Yeah String found in .\Hello_World.docx
*** Yeah String found in .\My_Amazing_WordDoc.docx

7.プログラムをコマンドライン実行に変更する場合は、argparseを使用します。

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-s', type=str, help='Input string to search', default='Hello')
args = parser.parse_args()
main(args.s.lower())

  1. Word文書を回復する方法

    ドキュメントの作成に何時間も費やした後、突然、PCがクラッシュしました。何千もの言葉、何時間もの努力:一瞬で消えました。残念ながら、これは完全に考えられるシナリオであり、特にファイルを保存していない場合に、MicrosoftWordドキュメントを作成または編集しているときに発生する可能性があります。 ありがたいことに、Googleドキュメントと同様に、Wordは自分でドキュメントを保存していなくても、ドキュメントを自動保存できます。 Wordは、ファイルへの変更を回復したり、破損したドキュメントを回復したりするのにも役立ちます。苦労している場合は、Word文書を完全に失う前に回復するために実

  2. Python-パンダのデータフレームをCSVファイルに書き込む方法

    pandasデータフレームをPythonでCSVファイルに書き込むには、 to_csv()を使用します 方法。まず、リストの辞書を作成しましょう- # dictionary of lists d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],'Date_of_purchase': ['2020-10-10', '2020-10-12', '