Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打开从os.listdir()找到的文件并对文件执行任务_Python_Python 2.7_File_Directory_Pipe - Fatal编程技术网

Python 打开从os.listdir()找到的文件并对文件执行任务

Python 打开从os.listdir()找到的文件并对文件执行任务,python,python-2.7,file,directory,pipe,Python,Python 2.7,File,Directory,Pipe,所以我想打开一个目录中的每个文件(这个目录中有4个纯文本文档)。并查找每个文件中的特定单词及其出现次数 这是我使用的代码,但我得到的错误是没有这样的文件或目录,但我打印路径时,它清楚地显示每个文件的名称 import re import os path = 'C:\\Python27\\projects\\Alabama\\New folder' pattern = re.compile(r"\bmay not\b",re.IGNORECASE) pattern1 = re.compile(

所以我想打开一个目录中的每个文件(这个目录中有4个纯文本文档)。并查找每个文件中的特定单词及其出现次数

这是我使用的代码,但我得到的错误是没有这样的文件或目录,但我打印路径时,它清楚地显示每个文件的名称

import re
import os

path = 'C:\\Python27\\projects\\Alabama\\New folder'

pattern = re.compile(r"\bmay not\b",re.IGNORECASE)
pattern1 = re.compile(r"\bshall\b",re.IGNORECASE)
pattern2 = re.compile(r"\bmust\b",re.IGNORECASE)
pattern3 = re.compile(r"\bprohibited\b",re.IGNORECASE)
pattern4 = re.compile(r"\brequired\b",re.IGNORECASE)

for filenames in os.listdir(path):
 with open(filenames) as myfile:
    total = 0
    total1 = 0
    total2 = 0
    total3 = 0
    total4 = 0
    for line in myfile:
        m = re.findall(pattern, line)
        m1 = re.findall(pattern1, line)
        m2 = re.findall(pattern2, line)
        m3 = re.findall(pattern3, line)
        m4 = re.findall(pattern4, line)
        total += len(m)
        total1 += len(m1)
        total2 += len(m2)
        total3 += len(m3)
        total4 += len(m4)
    print total, total1, total2, total3, total4

我的问题是:如何执行上述任务,在目录中分别查找每个文档的特定单词(“shall”“must”等)的出现次数?

listdir
仅返回文件名。您必须将路径追加回文件名才能打开它们

for filenames in os.listdir(path):
    with open(os.path.join(path, filenames)) as myfile:
至于数单词,你有几个选择,这取决于你希望数的准确程度和你定义的“发生”是什么。例如,您可以将整个文件作为字符串读取,然后使用
str.count
方法仅计算特定单词的出现次数

for filenames in os.listdir(path):
    with open(os.path.join(path, filenames)) as myfile:
        content = myfile.read().lower()  # to essentially ignore the case
        shall_count = content.count('shall')

在open语句中的文件名前面添加路径。谢谢!剩下的我肯定是硬编码的。谢谢你的额外解释