我正在寻找一些帮助来解决我面临的问题
我试图读取一个文本文件,使用字典计算文件中每个字母出现的次数
大写字母转换为小写字母,只计算英语中的a-z。然后从计数中显示如下星形柱状图,并打印字母总数的计数
我让第一部分工作,计算每个字母在文件中出现的次数,直到我添加直方图代码
我没有收到错误,但终端在运行时仅显示以下内容:
{'d': 1}
我目前的代码是:
def LetterCount(file_path):
file_path = file_path.lower().translate(file_path)
file_path = file_path.translate(string.punctuation)
file_path = file_path.strip(string.punctuation + string.whitespace)
list1=list(file_path)
lcDict= {}
with open(file_path,'r') as f:
for l in list1:
if l.isalpha():
if l in lcDict:
lcDict[l] +=1
else:
lcDict[l]= 1
return lcDict
file_path = '/myfolder/text.txt'
if __name__ == "__main__":
print(LetterCount(file_path))
def histogram(file_path):
sumValues = LetterCount(file_path)
padding = max(len(sumValues), len('Element'))
padding1 = max(len(str(max(sumValues))), len('Value'))
print("\nCreating a histogram from values: ")
print("%s %10s %10s" %("Element", "Value", "Histogram"))
for i,n in enumerate(sumValues, start=1):
('{0} {1} {2}'.format(
str(i).ljust(padding),
str(i).rjust(padding1),
'*'*n))
print(histogram(file_path)
我想从柱状图中得到的是
a | *****
b | ***
c | ******
d | ****
e | *******
f | **
h | *****
...
z | *
如果有任何帮助,我将不胜感激
您可以使用一些标准库来让您的生活更轻松
因为我没有你的文件,也无法复制你的具体例子,所以我会分开回答这两个问题
首先,为了为您的文件(表示为字符串列表)创建直方图作为字典,请遵循以下代码部分:
输出:
上面的方法将迭代文件中的字母并计数,如果您想迭代
a
到z
,那么对于大文件将非常有效(此外,它还将打印文件中不存在的字母),您最好使用以下方法:输出:
现在,当我们手中有了柱状图(让我们继续第一个柱状图),让我们按照您的意愿面对格式化柱状图的第二部分:
输出:
把信分类,因为在我看来它看起来更好
相关问题 更多 >
编程相关推荐