0

我正在编写一些代码,它将通过一个文件,将其作为临时文件进行编辑,然后将临时文件复制到新文件上以便进行编辑。但是,当使用shutil 的move 方法时,我不断收到此错误:

IOError:[Errno 22] 无效参数

我试过使用 copy、copy2 和 copyfile。这是代码的副本:

def writePPS(seekValue,newData):
    PPSFiles = findPPS("/pps")
    for file in PPSFiles:
        #create a temp file
        holder,temp = mkstemp(".pps")
        print holder, temp
        pps = open(file,"r+")
        newpps = open(temp,"w")
        info = pps.readlines()
        #parse through the pps file and find seekvalue, replace with newdata
        for data in info:
            valueBoundry = data.find(":")
            if seekValue == data[0:(valueBoundry)]:
                print "writing new value"
                newValue = data[0:(valueBoundry+1)] + str(newData)
                #write to our temp file
                newpps.write(newValue)
            else: newpps.write(data)
        pps.close()
        close(holder)
        newpps.close()
        #remove original file
        remove(file)
        #move temp file to pps
        copy(temp,"/pps/ohm.pps")
4

1 回答 1

1

我不确定您为什么会收到该错误,但首先您可以尝试清理您的代码并修复所有这些导入语句。很难看出这些函数是从哪里来的,而且就你所知,你最终可能会发生命名空间冲突。

让我们从一些实际可运行的代码开始:

import shutil
import os
import tempfile

def writePPS(seekValue,newData):
    PPSFiles = findPPS("/pps")
    for file_ in PPSFiles:
        #create a temp file
        newpps = tempfile.NamedTemporaryFile(suffix=".pps")
        print newpps.name
        with open(file_,"r+") as pps:
            #parse through the pps file and find seekvalue, replace with newdata
            for data in pps:
                valueBoundry = data.find(":")
                if seekValue == data[0:(valueBoundry)]:
                    print "writing new value"
                    newValue = data[0:(valueBoundry+1)] + str(newData)
                    #write to our temp file
                    newpps.write(newValue)
                else: 
                    newpps.write(data)

            #move temp file to pps
            newpps.flush()
            shutil.copy(newpps.name,"/pps/ohm.pps")

您不需要将所有行读入内存。您可以循环遍历每一行。您也不需要管理所有这些打开/关闭文件操作。只需使用with上下文和 NamedTemporaryFile,它会在垃圾收集时自行清理。

重要说明,在您的示例及以上示例中,您每次都为每个源文件覆盖相同的目标文件。我把它留给你解决。但是如果你从这里开始,我们就可以开始找出你为什么会出错。

于 2012-06-25T18:24:09.180 回答