在Python中将文件中的行、字符和单词作为一个整体进行计数的首选方法

2024-04-25 18:06:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了两种计算文件行数的方法,如下所示。(注意:我需要整体阅读文件,而不是逐行阅读)

试着了解哪种方法在效率和/或良好的编码风格方面更好。你知道吗

names = {} 
for each_file in glob.glob('*.cpp'):
    with open(each_file) as f:
        names[each_file] = sum(1 for line in f if line.strip())

(见here

data = open('test.cpp', 'r').read()
print(len(data.splitlines()), len(data.split()), len(data))

(见here

在同一主题中,关于计算文件中的字符数计算文件中的字数,有没有比上面建议的更好的方法?你知道吗


Tags: 文件方法infordatalenherenames
2条回答

创建几个测试文件,并在一个大循环中测试它们,以查看平均时间。 确保测试文件符合您的场景。你知道吗

我用了这个代码:

import glob
import time

times1 = []
for i in range(0,1000):
    names = {} 
    t0 = time.clock()
    with open("lines.txt") as f:
        names["lines.txt"] = sum(1 for line in f if line.strip())
        print names
    times1.append(time.clock()-t0)

times2 = []
for i in range(0,1000):
    names = {} 
    t0 = time.clock()
    data = open("lines.txt", 'r').read()
    print("lines.txt",len(data.splitlines()), len(data.split()), len(data))

    times2.append(time.clock()-t0)


print sum(times1)/len(times1)
print sum(times2)/len(times2)

得出了平均时间: 0.0104755582104和 0.0180650466201秒

这是一个23000行的文本文件。例如:

print("lines.txt",len(data.splitlines()), len(data.split()), len(data))

输出:('行.txt'、23056、161392、1095160)

在实际的文件集上进行测试,以获得更准确的计时数据。你知道吗

使用生成器表达式提高内存效率(这种方法可以避免将整个文件读入内存)。这是一个演示。你知道吗

def count(filename, what):
    strategy = {'lines': lambda x: bool(x.strip()),
                'words': lambda x: len(x.split()),
                'chars': len
    }

    strat = strategy[what]
    with open(filename) as f:
        return sum(strat(line) for line in f)

你知道吗输入文件地址:

this is
a test file
i just typed

输出:

>>> count('input.txt', 'lines')
3
>>> count('input.txt', 'words')
8
>>> count('input.txt', 'chars')
33

请注意,计数字符时,换行符也会被计数。还要注意的是,它使用了一个相当粗糙的“word”定义(您没有提供),它只是按空格分割一行,并统计返回列表的元素。你知道吗

相关问题 更多 >