所以,我正在用python备份一些google文档来创建一堆临时文件。我已经把这些文件复制了操作系统副本. 现在我准备删除它们。我是这样创造的:
line = entry.id.text
title = entry.title.text
splitLine = line.split('/')
key = splitLine[-1]
backUpDir = R'\\XXX\XXXXX\XXXX\XXXXX\otherFiles\GoogleDocBackUp' + '\\'
today = datetime.date.today()
if not os.path.exists(backUpDir + str(today)):
os.mkdir(backUpDir + str(today))
backupDir = backUpDir + str(today)
tempfile.tempdir = backupDir
file_path = tempfile.mkstemp(suffix='.xls')
uri = 'http://docs.google.com/feeds/documents/private/full/%s' % key
spreadsheets_client = gdata.spreadsheet.service.SpreadsheetsService()
spreadsheets_client.email = self.gd_client.email
spreadsheets_client.password = self.gd_client.password
spreadsheets_client.source = "My Fancy Spreadsheet Downloader"
spreadsheets_client.ProgrammaticLogin()
# ...
docEntry = self.gd_client.GetDocumentListEntry(uri)
docs_auth_token = self.gd_client.GetClientLoginToken()
self.gd_client.SetClientLoginToken(spreadsheets_client.GetClientLoginToken())
self.gd_client.Export(docEntry, file_path[1])
shutil.copy(file_path[1], backupDir + '//' + title + '.xls')
self.gd_client.SetClientLoginToken(docs_auth_token)
os.close(file_path[0])
我曾经看过临时文件。临时的文件而不是mkstemp,但我得到权限错误。(我怀疑临时文件也试图删除我给它的目录)
所以回到问题的实质。我试着用操作系统删除对于这些临时文件,python不会放弃对它的控制。(我知道我的操作系统删除代码之所以有效,是因为我对一些剩余的临时文件运行了该函数,这些文件被删除后没有出现问题。)
如果我可以删除临时文件的话,我会喜欢这里的。如果我做不到,有没有必要在python中就地重命名一个文件?在
到目前为止,我得到了一些关于获取mkstemp应该返回的文件句柄的建议……但是我没有任何运气。当我在调试器中查看它时,我只看到一个整数和文件路径。在
更新!我想我已经修好了,我只需要打个电话操作系统关闭在文件路径[0]上,它似乎关闭了!谢谢大家!这是更新的代码
再次感谢。在
mkstemp()同时返回fd和path。操作系统删除()接受路径,而不是元组。请先关闭文件,然后再删除(
os.close(fd)
)。在您应该能够在没有权限问题的情况下使用
tempfile.TemporaryFile()
。在要以原子方式重命名文件,可以使用^{} 。}失败时工作,但它不是原子的。在
shutil.move()
可能在{很抱歉,如果这是显而易见的,但只是检查一下,在删除文件之前,您正在关闭这些文件,对吗?在
Python doc source for above
因此,在尝试删除文件句柄之前,我将尝试对文件句柄执行
close()
调用。在可以使用shutil.move()移动文件。在
相关问题 更多 >
编程相关推荐