Python os.path.isdir() leaving out results Python的os.path.isdir()函数会忽略掉一些结果。

9 浏览
0 Comments

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

0
0 Comments

问题的出现的原因是使用了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

0
0 Comments

问题的出现原因:使用`os.path.isdir()`函数判断文件夹是否存在时,结果不准确。

解决方法:修改代码,使用`os.path.join()`函数将文件名与文件夹路径拼接起来再进行打开操作。

具体修改如下:

f = open(os.path.join('testfilefolder', filename), 'r')

这样的修改效果与下面的代码是一样的:

f = open("testfilefolder/file2.txt", 'r')

问题的原因在于,你列出了'testfilefolder'文件夹中的文件,但是在打开文件时却尝试从当前目录打开文件。

通过使用`os.path.join()`函数,你可以根据文件夹路径和文件名自动拼接出正确的文件路径,从而解决了这个问题。

0