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 试图读取文件并计算字母的主要内容,如果未能解决你的问题,请参考以下文章

Python:argparse 读取 csv 文件功能

argparse简要用法总结

如何让 argparse 使用选项而不是前缀从文件中读取参数

使用 Argparse 读取配置

(转)Python3 -- argparse模块

批处理遍历并计算子文件夹下的文件数目