使用以下代码我收到IOError: [Errno 13] Permission denied
,我知道这是因为输出目录是输入目录的子文件夹:
import datetime
import os
inputdir = "C:\\temp2\\CSV\\"
outputdir = "C:\\temp2\\CSV\\output\\"
keyword = "KEYWORD"
for path, dirs, files in os.walk(os.path.abspath(inputdir)):
for f in os.listdir(inputdir):
file_path = os.path.join(inputdir, f)
out_file = os.path.join(outputdir, f)
with open(file_path, "r") as fh, open(out_file, "w") as fo:
for line in fh:
if keyword not in line:
fo.write(line)
但是,当我将输出文件夹更改为:outputdir = "C:\\temp2\\output\\"
时,代码会成功运行。我希望能够将修改后的文件写入输入目录的子文件夹。如果不收到“权限被拒绝”错误,我该怎么做? tempfile
模块在这种情况下是否有用?
答案 0 :(得分:1)
os.listdir
将返回目录以及文件名。 output
在inputdir
之内,因此with
正在尝试打开一个用于读/写的目录。
你到底想要做什么? path, dirs, files
甚至没有使用os.walk
。
编辑:我认为您正在寻找类似的内容:
import os
INPUTDIR= "c:\\temp2\\CSV"
OUTPUTDIR = "c:\\temp2\\CSV\\output"
keyword = "KEYWORD"
def make_path(p):
'''Makes sure directory components of p exist.'''
try:
os.makedirs(p)
except OSError:
pass
def dest_path(p):
'''Determines relative path of p to INPUTDIR,
and generates a matching path on OUTPUTDIR.
'''
path = os.path.relpath(p,INPUTDIR)
return os.path.join(OUTPUTDIR,path)
make_path(OUTPUTDIR)
for path, dirs, files in os.walk(INPUTDIR):
for d in dirs:
dir_path = os.path.join(path,d)
# Handle case of OUTPUTDIR inside INPUTDIR
if dir_path == OUTPUTDIR:
dirs.remove(d)
continue
make_path(dest_path(dir_path))
for f in files:
file_path = os.path.join(path, f)
out_path = dest_path(file_path)
with open(file_path, "r") as fh, open(out_path, "w") as fo:
for line in fh:
if keyword not in line:
fo.write(line)
答案 1 :(得分:1)
如果您成功写入输入遍历目录之外的输出目录,则首先使用与上面相同的代码将其写入,然后将其移动到输入目录中的子目录。您可以使用os.move
。