Python - 从目录中读取文件,但在子目录中找不到文件(该文件确实存在)

19 浏览
0 Comments

Python - 从目录中读取文件,但在子目录中找不到文件(该文件确实存在)

我相信这只是一个简单的语法问题 - 但我不知道为什么我的代码:

import os
from collections import Counter
d = {}
for filename in os.listdir('testfilefolder'):
    f = open(filename,'r')
    d = (f.read()).lower()
    freqs = Counter(d)
    print(freqs)

无法工作 - 它似乎可以进入\'testfilefolder\'文件夹并告诉我文件在那里,例如一个错误消息\'file2.txt\'没有找到。它可以找到它告诉我它没有找到...

然而我可以使这段代码工作:

from collections import Counter
d = {}
f = open("testfilefolder/file2.txt",'r')
d = (f.read()).lower()
freqs = Counter(d)
print(freqs)

奖励-这是我正在尝试做什么的好方法(从文件中读取并计算单词的频率)?这是我用Python的第一天(虽然我在程序设计方面有一些经验)。我必须说我喜欢Python!

谢谢

布赖恩

admin 更改状态以发布 2023年5月24日
0
0 Comments

正如isedev指出的那样,listdir()只返回文件名,而不是完整路径(或相对路径)。 解决此问题的另一种方法是进入相关目录,然后使用 os.listdir('。')< / code>。

其次,您的目标似乎是计算单词频率,而不是字母(字符)频率。 为此,您需要将文件内容分解为单词。 我更喜欢使用正则表达式。

第三,您的解决方案分别为每个文件计算单词频率。 如果您需要对所有文件执行此操作,请在开始时创建一个 Counter()对象,然后调用 update()方法以统计计数。

没有更多的扯淡,我的解决方案:

import collections
import re
import os
all_files_frequency = collections.Counter()
previous_dir = os.getcwd()
os.chdir('testfilefolder')
for filename in os.listdir('.'):
    with open(filename) as f:
        file_contents = f.read().lower()
    words = re.findall(r"[a-zA-Z0-9']+", file_contents) # Breaks up into words
    frequency = collections.Counter(words)              # For this file only
    all_files_frequency.update(words)                   # For all files
    print(frequency)
os.chdir(previous_dir)
print ''
print all_files_frequency

0