Python IOError:[Errno 13]权限被拒绝

2024-04-19 09:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

通过下面的代码,我收到了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模块是否有用?


Tags: csvpath代码inimport目录文件夹for
2条回答

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)

如果成功地写入到输入遍历目录之外的输出目录,则首先使用与上面相同的代码将其写入该目录,然后将其移动到输入目录内的子目录。你可以用os.move来做这个。

相关问题 更多 >