Python os.path.isdir() leaving out results Python的os.path.isdir()函数会忽略掉一些结果。
Python os.path.isdir() leaving out results Python的os.path.isdir()函数会忽略掉一些结果。
我相信这只是一个简单的语法问题-但我无法理解为什么我的代码会出错:\n
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)
\n它似乎可以看到\'testfilefolder\'文件夹并告诉我文件存在,即出现错误消息\'file2.txt\'未找到。所以它能找到它告诉我它没有找到...\n然而,我可以让这段代码正常工作:\n
from collections import Counter d = {} f = open("testfilefolder/file2.txt",'r') d = (f.read()).lower() freqs = Counter(d) print(freqs)
\n额外问题-这是否是我尝试做的事情的好方法(从文件中读取并计算单词的频率)?这是我使用Python的第一天(尽管我有一些编程经验)。\n我必须说我喜欢Python!\n谢谢,\nBrian
问题的出现的原因是使用了os.listdir()函数,该函数只返回文件名而不返回完整路径。解决方法是使用os.chdir()将当前工作目录切换到指定目录,然后使用os.listdir('.')获取文件列表。
另外,代码中的目标是统计单词的出现频率而不是字符。为了实现这一目标,需要将文件内容分割成单词。可以使用正则表达式来实现。
此外,代码中的解决方案是分别对每个文件计算单词频率。如果需要对所有文件进行计算,则可以在开始时创建一个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) # 分割成单词 frequency = collections.Counter(words) # 仅针对当前文件 all_files_frequency.update(words) # 对所有文件 print(frequency) os.chdir(previous_dir) print('') print(all_files_frequency)
非常感谢大家!我现在看到了os.listdir的问题,确实只找到了文件名而没有访问整个文件。非常感谢你们提供的解决方案。我遇到的问题是它似乎将临时文件也加载并计数进去了。例如,在下面的输出中的file3.txt~中:file2.txt~ Counter({'e': 2, 'a': 1, 'c': 1, 'd': 1, 'i': 1, 'l': 1, 's': 1}) file2.txt Counter({'a': 1, 'b': 1})这对目录中的所有文件都是如此,然后最后还进行统计。谢谢,Brian
问题的出现原因:使用`os.path.isdir()`函数判断文件夹是否存在时,结果不准确。
解决方法:修改代码,使用`os.path.join()`函数将文件名与文件夹路径拼接起来再进行打开操作。
具体修改如下:
f = open(os.path.join('testfilefolder', filename), 'r')
这样的修改效果与下面的代码是一样的:
f = open("testfilefolder/file2.txt", 'r')
问题的原因在于,你列出了'testfilefolder'文件夹中的文件,但是在打开文件时却尝试从当前目录打开文件。
通过使用`os.path.join()`函数,你可以根据文件夹路径和文件名自动拼接出正确的文件路径,从而解决了这个问题。