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

Python:为什么我的[Errno 13]权限被拒绝?,python,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

我试图编写一些代码,在一组文件中搜索一个字符串,然后将包含该字符串的任何文件放在程序开始时不存在的不同目录中

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'

想知道是否有人能告诉我出现此错误消息的原因。

您无法打开目录进行写入:

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:
要移动文件,请改用;无需为此“打开”目录:

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)

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

“ZZZ”中的“XXX”或“YYY”总是计算为True。这和
(“XXX”)或“ZZZ”中的(“YYY”)
。由于非空字符串的计算结果为True,因此将选择所有文件

编辑:

似乎所有文件都包含
“facebook.com”
“facebook.com”
,但这只是因为
“facebook.com”
本身的计算结果为真<代码>内容中的“Facebook.com”
将永远不会被检查。if语句在功能上等于

if "facebook.com":
    ...
并且将执行if块。你真正的意思是

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

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

不确定这是否是导致错误的原因,但您正在创建一个目录,然后尝试打开它进行写入。此外,错误与哪一行有关?可能就是这一行-你不是想在目录中打开一个文件吗?@DavidRobinson我的意思是将存储在x中的文件移动到新目录中。我只是想将任何包含字符串的文件移动到新目录中directory@LWH91:然后,上述代码将在中使用相同的基本文件名写入新文件
FacebookFiles
目录,内容相同。很有效,谢谢。出于兴趣,没有办法在不首先打开目录的情况下移动文件吗?就像从a复制到B一样thing@LWH91:您需要首先创建目录(这就是
os.mkdir()
为您所做的),但根本不需要打开目录。我简化了
move()
调用,它已经检测到目标是否是一个目录,并将文件移动到同名目录中。这就是我的想法,我如何将文件从第一个目录复制/移动到第二个目录?我明白你的意思。谢谢,我在看正则表达式,我更喜欢用它们
if ("facebook.com" in content) or ("Facebook.com" in content):
    ...