在文本文件中查找每个关键字并记录文件名

Find each keyword in a text file and record with file name

我已经从 SQL 服务器下载了约 100 个存储过程作为 .txt 文件。从这些 txt 文件中,我希望记录以“XXX”开头的关键字的每次迭代。所以每次脚本中出现这个词时,它都会被放入一个数据框中,旁边是文件名。

例如:

File: fileone

Script: "AAA BBB CCC XXXA XXXB DDD"

会return:

关键词 文件
XXXA 文件一
XXXB 文件一

我有一个关键字数据框,想在我的所有文件中循环使用它。

理想情况下,输出如下所示:

关键词 文件 文件 文件
XXXA 文件一 文件二 文件三
XXXB 文件一 文件二
XXXC 文件三

下面是我用于 return 关键字列表的代码:我通过获取我所有存储过程的组合脚本(复制并粘贴到一个 txt 文件中)并找到所有包含“XXX”的关键字的数量。

with open(allprocs, 'r') as f:
for line in f:
    for word in line.split():
        if word.startswith('XXX.'):
            list.append(word)

new_List = pd.unique(list).tolist()
df1 = pd.DataFrame(new_List,
              columns = ['Tables'])
df1 = df1.drop_duplicates()

由于我没有你的数据,我提供了一个解决方案,为包含一些 python 脚本的目录生成数据集,我正在寻找以 n.[= 开头的单词17=]

首先我们需要该目录中所有相关文件的列表,这样我们就可以一个一个地访问它们,避免手动复制和粘贴内容。

import glob
files = glob.glob("/PATH/*.py")

接下来我们将生成一个带有关键字文件映射的 tidy 数据框。

import pandas as pd
import nltk  # optional
collect = []
for file in files:
    with open(file, 'r') as file_handle:
        for line in file_handle:
            # for word in line.split():
            for word in nltk.word_tokenize(line): # optional
                if word.startswith('n'):
                    collect.append({'keyword': word, 'filename': file.split('/')[-1]})

words_files_tidy = pd.DataFrame.from_records(collect).drop_duplicates()

这为我们提供了您首先描述的数据框。

keyword filename
XXXA fileone
XXXC fileone
XXXB filetwo
XXXC filetwo
XXXA filethree

最后,旋转数据集以获得所需的结果。

final_df = words_files_tidy.pivot(index='keyword', columns='filename', values='filename').reset_index()

哪个会得到你

Keyword fileone filetwo filethree
XXXA fileone null filethree
XXXB fileone filetwo null
XXXC null null filethree

必要时重命名列。