在文本文件中查找每个关键字并记录文件名
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
必要时重命名列。
我已经从 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 |
必要时重命名列。