我正在编写一些代码,这些代码将通过一个文件,将其编辑为临时文件,然后将临时文件复制到新文件中以进行编辑。但是当从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")
答案 0 :(得分:1)
我不确定你为什么会收到这个错误,但是开始你可以尝试清理你的代码并修复所有这些import语句。很难看出函数的来源,而且你知道最终会发生命名空间冲突。
让我们从一些实际可运行的代码开始:
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,它将在垃圾收集时自行清理。
重要提示,在您的示例及上述内容中,每次为每个源文件覆盖相同的目标文件。我就是这样留给你解决的。但是如果你从这里开始,我们就可以开始弄清楚你为什么会遇到错误。