Python - reading files from directory file not found in subdirectory (which is there)
我相信这只是简单的句法上的东西-但是我不明白我的代码的原因:
1 2 3 4 5 6 7 8 | 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"。所以它能找到它告诉我它没有找到…
但是,我让这段代码工作:
1 2 3 4 5 6 | from collections import Counter d = {} f = open("testfilefolder/file2.txt",'r') d = (f.read()).lower() freqs = Counter(d) print(freqs) |
额外的好处——这是一个很好的方法来做我想做的事情吗(从文件中读取并计算单词的频率)?这是我第一天使用Python(尽管我有一些编程经验)。
我不得不说我喜欢Python!
谢谢,
布瑞恩
变化:
1 | f = open(filename,'r') |
到:
1 | f = open(os.path.join('testfilefolder',filename),'r') |
这实际上就是你在做的:
1 | f = open("testfilefolder/file2.txt",'r') |
原因:您正在列出"testfilefolder"(当前目录的子目录)中的文件,然后尝试在当前目录中打开该文件。
正如isedev指出的,listdir()只返回文件名,而不返回完整路径(或相对路径)。另一种解决这个问题的方法是将
其次,你的目标似乎是计算单词的频率,而不是字母(字符)。为此,您需要将文件的内容分解为单词。我更喜欢使用正则表达式。
第三,您的解决方案分别计算每个文件的单词频率。如果需要对所有文件执行此操作,请在开始时创建一个
不用再多费吹灰之力,我的解决方案是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |