我有一个包含多个 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?当我在记事本中打开文件时,速度非常快,并且行数显示没有任何延迟。所以我不确定我的代码是否不好或者是否有更快的实现?
除了计算行数之外,您似乎没有将数据用于任何其他用途。不需要 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