如何使用包含文本文件的文件夹返回字典?

Posted

技术标签:

【中文标题】如何使用包含文本文件的文件夹返回字典?【英文标题】:How can I return a dictionary using a folder containing text files? 【发布时间】:2021-07-24 18:45:51 【问题描述】:

我想返回一个以文本文件名作为键的字典。然后我有一个数据框,其中包含三列不同的单词。我想返回文本文件中显示的该列中每个单词的计数作为值。所以例如我已经完成了import os 并使用方法os.listdir() 来显示我的文本文件列表。

myinput: 
import pandas as pd
import re
import os
txtlist = os.listdir("./data")
print(txtlist)

myoutput: 
['textone.txt', 'texttwo.txt', 'textthree.txt']

接下来,我定义了我要从 excel 文件中查找的单词的数据框。

myinput: 
wrdlist = pd.read_excel("words.xlsx")
wrdlist

myoutput: 
       Color       Shape       Description
0      red         square        happy
1      green       circle         sad
2     yellow      triangle        mad
3    navy blue      cube        disgust

我已经使用数据框创建了一个可用于颜色的列表

myinput:
colorwrds = []
for word in wrdlist.Color:
     colorwrds.append(re.compile(r"\b"+word+r"\b"))

最后,我想使用所有这些来返回以文件为键并以颜色计数为值的字典。所以文件 textone.txt 有 navy blue 一次和 red 两次,texttwo.txt 有 yellow 两次,green 一次,navy blue 一次和 red 一次,textthree.txt 有 red 一次。

Desiredoutput:
'textone.txt' : 3, 'texttwo.txt' : 5, 'textthree.txt':1

我试图创建一个这样的函数,但我不确定我是否做得对。

attemptedinput to achieve desired output:

def counterfunction(textfilelist, importantwordslist):
     mydict = 
     for wordname in importantwordslist.lower():
          mydict[wordname] = 0
     for wordname in textfilelist.lower():
          if wordname in mydict.keys():
               mydict[wordname] += 1
     return mydict

print(counterfunction(txtlist, wrdlist)

【问题讨论】:

请始终提供样本输入/输出! minimal reproducible example 【参考方案1】:

您可以像这样从数据框中获取字数:

import pandas as pd
from collections import Counter

df = pd.DataFrame('Color': 0: 'red', 1: 'green', 2: 'yellow', 3: 'navy_blue',
 'Shape': 0: 'square', 1: 'circle', 2: 'triangle', 3: 'cube',
 'Description': 0: 'happy', 1: 'sad', 2: 'mad', 3: 'disgust')

colors = ['red', 'green', 'yellow']


color_count = sum([n for c, n in Counter(df.to_numpy().flatten()).items() if c in colors])

print(color_count)
#3

所以在没有任何样本数据的情况下,它可能看起来像这样:

import os
root = r'D:\Test'
filenames = [r'textone.txt', r'texttwo.txt', r'textthree.txt']
colors = ['red', 'green', 'yellow']

dict_results = dict()
for file in filenames:
    path = os.path.join(root, filenames)
    df = pd.read_csv(path)
    color_count = sum([n for c, n in Counter(df.to_numpy().flatten()).items() if c in colors])
    dict_results[file] = color_count = sum([n for c, n in Counter(df.to_numpy().flatten()).items() if c in colors])

【讨论】:

以上是关于如何使用包含文本文件的文件夹返回字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何解析 HAR 文件以提取文本内容?

Python:从字典格式的文本/文件创建字典

如何在 csv/文本文件上一次计算多个字符串或一个字符串,并使用 powershell 返回包含列表数据中的字符串的值

如何将字典的文本文件读入 DataFrame

Python - 如何在文本文件中制作字典?

如何在 Swift(CreateML) 中读取文本文件的内容并将其解析为字典