如何使用包含文本文件的文件夹返回字典?
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])
【讨论】:
以上是关于如何使用包含文本文件的文件夹返回字典?的主要内容,如果未能解决你的问题,请参考以下文章