在Python中

时间:2017-08-31 08:12:51

标签: python file loops

我正在尝试编写一个计算文本文件中字符数并返回结果的函数。我有以下代码;

def file_size(filename):
    """Function that counts the number of characters in a file"""
    filename = "data.txt"
    with open(filename, 'r') as file:
        text = file.read()
        len_chars = sum(len(word) for word in text)
        return len_chars

当我使用我创建的文本文件进行测试时,这似乎在我的IDE中正常工作。但是当我将代码提交给doctest程序时,我得到一个错误,说它总是给出10的输出。任何帮助?

附件是错误消息的屏幕截图 Error screen

4 个答案:

答案 0 :(得分:4)

您不使用该函数的参数,但使用常量filename覆盖"data.txt"

def file_size(filename):
    """Function that counts the number of characters in a file"""
    with open(filename, 'r') as file:
        return len(file.read())

答案 1 :(得分:1)

ASCII文件的超高效解决方案(在theta(1)中运行):

import os
print(os.stat(filename).st_size)

答案 2 :(得分:0)

如果您只想要ASCII文件的文件大小,则应使用os.stat

this.compute( "", 0 );

这个功能的最大优点是不需要读取文件。 Python只是询问文件系统的文件大小。

答案 3 :(得分:0)

您可以sum()使用iter(partial(f.read, 1), '')周围的生成器表达式,从computeIfAbsent()获取灵感:

from functools import partial

def num_chars(filename):
    """Function that counts the number of characters in a file"""
    with open(filename) as f:
        return sum(1 for _ in iter(partial(f.read, 1), ''))

与使用f.read()相比,这种方法的主要优点是 lazy ,因此您不会将整个文件读入内存。