Python:为什么我得到[Errno 13]权限被拒绝?

时间:2013-01-08 21:05:15

标签: python

我正在尝试编写一些代码来搜索一组文件中的字符串,然后将包含该字符串的任何文件放入不同的目录中,该目录在程序开头就不存在了。

import os
import re

def test():
    os.chdir("C:/Users/David/Files/TestFiles")
    files = os.listdir(".")
    os.mkdir("C:/Users/David/Files/TestFiles2")
    for x in (files):
        inputFile = open((x), "r")
        content = inputFile.read()
        inputFile.close()
        if "Hello Word" in content:
            with open ("C:/Users/David/Files/TestFiles2", "w") as outputFile:
                outputFile.write(content)

运行时,我收到以下错误消息

PermissionError: [Errno 13] Permission denied: 'C:/Users/David/Files/TestFiles2'

只是想知道是否有人可以告诉我为什么会出现此错误消息。

2 个答案:

答案 0 :(得分:4)

您无法打开写入目录:

os.mkdir("C:/Users/David/Files/TestFiles2")

接着是

open("C:/Users/David/Files/TestFiles2", "w")

不起作用。你的意思是在后一个语句中添加文件名吗?

如果要基于x文件名,则应将该名称添加到路径中:

with open(os.path.join("C:/Users/David/Files/TestFiles2", os.path.basename(x)), 'w') as outputFile:

移动文件,请改用shutil.move();无需“打开”该目录:

if "facebook.com" in content.lower():
     shutil.move(x, "C:/Users/David/Files/TestFiles2")

完整代码,简化:

def test():
    src = "C:/Users/David/Files/TestFiles"
    dst = "C:/Users/David/Files/TestFiles2"
    os.mkdir(dst)
    for filename in os.listdir(src):
        path = os.path.join(src, filename)
        with open(path, "r") as inputFile:
            content = inputFile.read()
        if "facebook.com" in content.lower():
            shutil.move(path, dst)

答案 1 :(得分:0)

您将使用该if语句选择所有文件:

"XXX" or "YYY" in "ZZZ"始终评估为True。它是一样的 ("XXX") or ("YYY" in "ZZZ")。由于非空字符串的计算结果为True,因此您将选择所有文件。

编辑:

if "facebook.com" or "Facebook.com" in content:
    ...

似乎所有文件都包含"facebook.com""Facebook.com",但这只是因为"facebook.com"本身评估为True。永远不会检查"Facebook.com" in content。 if语句在功能上等于

if "facebook.com":
    ...

将执行if块。你的意思是

if ("facebook.com" in content) or ("Facebook.com" in content):
    ...

就是这样。如果您不想两次搜索所有内容,可以使用正则表达式,但这是一个不同的主题。