计算每个csv的行数,更快的代码

问题描述 投票:0回答:1

我有一个包含多个 csv 文件的文件夹。当我在记事本中打开它们时,我可以看到行数/行数。这有效。然而,这是手动检查。我想使用以下代码自动执行此操作:

import os
import csv

with open("number of lines check.txt", "w") as a:
    for path, subdirs, files in os.walk(r'C:\Desktop\folder'):
        for filename in files:
            with open(os.path.join(path, filename), "r", encoding ="utf-8") as f:
                reader = csv.reader(f, delimiter ="\t")
                data = list(reader)
                row_count = len(data)
                f = os.path.join(path, filename)
                a.write(str(f)+" "+str(row_count) + os.linesep)

这有效,它给了我一个带有文件名和行数的文件。然而,我的问题是,由于某些原因,这段代码需要很长时间才能运行。我不知道为什么。我想,这是因为它必须读取每个 csv?当我在记事本中打开文件时,速度非常快,并且行数显示没有任何延迟。所以我不确定我的代码是否不好或者是否有更快的实现?

python csv
1个回答
2
投票

除了计算行数之外,您似乎没有将数据用于任何其他用途。不需要 CSV 阅读器。

文件可以按行迭代,因此您可以循环遍历它并计算迭代次数。写出也有开销,所以写一次会更快。

row_counts = {}

for path, subdirs, files in os.walk(r'C:\Desktop\folder'):
    for filename in files:
        with open(os.path.join(path, filename), "r", encoding ="utf-8") as f:
            rows = len(list(f))
            row_counts[filename] = rows

with open("number of lines check.txt", "w") as a:
    for f, count in row_counts.items():
        a.write(f"{f} {count}\n")

如果文件非常大,最好迭代它们并维护计数,这样您就不需要一次读取整个文件。

for filename in files:
    with open(os.path.join(path, filename), "r", encoding ="utf-8") as f:
        rows = 0
        for _ in f: rows += 1
        row_counts[filename] = rows
© www.soinside.com 2019 - 2024. All rights reserved.