如何打开包含多个文件的文件夹?我测试了此代码,但它返回了一个奇怪的答案。
import os
for ZebRa in os.listdir(os.getcwd()):
num_words = 0
for line in ZebRa:
words = line.split ()
num_words += len (words)
print ("The number of words:", num_words)
只返回 9。但它应该计算 7 个文件、70 个文本文件中的单词数。
答案1
你需要 Python 吗?你可以使用命令行工具来统计单词数wc
:
wc -w *
wc
(word count 的缩写)是一款方便的工具,用于统计文本文件中的单词、字符或行数。打开终端,导航到包含要统计单词的文件的文件夹,然后运行上述命令。第一个参数-w
表示统计单词(而不是行数或字符数)。您可以传递文件名以统计特定文件,也可以使用通配符,例如*
统计当前文件夹中所有文件中的单词数。
如果您的文件位于子文件夹中,最简单的方法是使用以下方法find
来获取文件列表:
find . -type f -exec wc -w {} +
答案2
如上所述,您的代码对我来说不是很清楚。您犯的一个错误是将行放在num_words = 0
循环内,这意味着在每个子文件夹中,您都会从 0 开始计数。
如果如果你想使用 python,那么可以使用os.walk
,它将计算目录及其子目录中所有文件的单词数,无论它们如何排列:
#!/usr/bin/env python3
import os
dr = "/path/to/ZebRa"; n_words = 0
for root, dirs, files in os.walk(dr):
for file in files:
with open(root+"/"+file) as r:
n_words += len(r.read().split())
print(n_words)
笔记)
- 请记住,如果您(曾经)使用例如编辑过文本文件
gedit
,gedit
则可能创建了(隐藏的)备份文件,名为filename~
。除非您告诉脚本不要读取这些文件,否则这些文件也会被读取,这会污染字数统计。 - 还要记住的是,如果脚本遇到无法读取的文件,它将会中断,除非您告诉它在无法读取文件时通过。
将这两个问题编辑到脚本中,将会产生:
#!/usr/bin/env python3
import os
dr = "/path/to/ZebRa"; n_words = 0
for root, dirs, files in os.walk(dr):
for f in [f for f in files if not f.startswith(".") and not f.endswith("~")]:
try:
with open(root+"/"+f) as r:
n_words += len(r.read().split())
except UnicodeDecodeError:
pass
print(n_words)