我正在尝试编写一些代码来搜索一组文件中的字符串,然后将包含该字符串的任何文件放入不同的目录中,该目录在程序开头就不存在了。
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'
只是想知道是否有人可以告诉我为什么会出现此错误消息。
答案 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):
...
就是这样。如果您不想两次搜索所有内容,可以使用正则表达式,但这是一个不同的主题。