Python删除临时文件错误仍在美国

2024-10-01 09:36:01 发布

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

所以,我正在用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]上,它似乎关闭了!谢谢大家!这是更新的代码

再次感谢。在


Tags: 文件pathselfclientdocstodaytitleos
3条回答

mkstemp()同时返回fd和path。操作系统删除()接受路径,而不是元组。请先关闭文件,然后再删除(os.close(fd))。在

您应该能够在没有权限问题的情况下使用tempfile.TemporaryFile()。在

要以原子方式重命名文件,可以使用^{}shutil.move()可能在{}失败时工作,但它不是原子的。在

很抱歉,如果这是显而易见的,但只是检查一下,在删除文件之前,您正在关闭这些文件,对吗?在

mkstemp()

"returns a tuple containing an OS-level handle to an open file (as would be returned by os.open()) and the absolute pathname of that file, in that order"

Python doc source for above

因此,在尝试删除文件句柄之前,我将尝试对文件句柄执行close()调用。在

可以使用shutil.move()移动文件。在

相关问题 更多 >