在python中打开一个包含多个文件的文件夹

在python中打开一个包含多个文件的文件夹

如何打开包含多个文件的文件夹?我测试了此代码,但它返回了一个奇怪的答案。

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)

笔记)

  1. 请记住,如果您(曾经)使用例如编辑过文本文件geditgedit则可能创建了(隐藏的)备份文件,名为filename~。除非您告诉脚本不要读取这些文件,否则这些文件也会被读取,这会污染字数统计。
  2. 还要记住的是,如果脚本遇到无法读取的文件,它将会中断,除非您告诉它在无法读取文件时通过。

将这两个问题编辑到脚本中,将会产生:

#!/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)

相关内容