Python3 Argparse 试图读取文件并计算字母
Posted
技术标签:
【中文标题】Python3 Argparse 试图读取文件并计算字母【英文标题】:Python3 Argparse Trying to read a file and count the letters 【发布时间】:2018-03-28 05:52:27 【问题描述】:我做了一个函数,可以打开一个文本文件并计算字母,它看起来像这样:
def count_letters(fname):
lettercounter = 0
with open(fname, "r") as f:
letters = []
Scharacters = [",", ".", " "]
for letter in f.read():
if letter not in Scharacters:
lettercounter += 1
return lettercounter
但是当我尝试像这样运行它时:
if opts["known_args"]["commands"] == "letters":
funk.count_letters(opts["known_args"])
它返回一个错误:
line 35, in count_letters with open(fname, "r") as f: TypeError: expected str, bytes or os.PathLike object, not dict
有人可以解释发生了什么吗?它应该列出一个列表,然后返回里面的字母数,所以我不确定 dict 来自哪里......我是否以错误的方式打开文件,因为它指向打开文件的行?
【问题讨论】:
为什么不增加一个计数器呢?if letter not in Scharacters: lettercounter += 1
。在这里根本不需要保留字母列表。
公平点,我已经改了。
【参考方案1】:
您正在将字典对象(您的 opts["known_args"]
变量)传递给您的 count_letters()
方法的 fname
参数。该参数随后被用于open(fname, "r")
,它需要一个文件名字符串(或 os.path)。
例如这样的事情会起作用:
if opts["known_args"]["commands"] == "letters":
funk.count_letters("/path/to/file")
【讨论】:
我认为它通过已知参数传递整个字典: opts: 'known_args': 'silent': 'False', 'verbose': 'False', 'filename': 'phil .txt', 'commands': 'letters', 'unknown_args': []opts["known_args"]["filename"]
,所以你可以把它传递给你的count_letters()
方法吗?
好了,错误已清除,那么您尝试打开的文件(“phil.txt”)是否存在?
是的,它位于我的桌面上,因此它与正在使用的其他文件位于同一个“文件夹”中。以上是关于Python3 Argparse 试图读取文件并计算字母的主要内容,如果未能解决你的问题,请参考以下文章