そのため、PythonでいくつかのGoogleドキュメントをバックアップして一時ファイルを作成しています。これらのファイル os.copy の適切なコピーを既に作成しています。これで、それらを削除する準備が整いました。私は次のように作成しました:
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 の代わりに tempfile.Temporary ファイルを作成することを検討しましたが、権限エラーが発生していました。(一時ファイルが、指定したディレクトリも削除しようとしたと思われます)
では、問題の本質に戻りましょう。これらの一時ファイルで os.remove を使用しようとしましたが、python はその保持を放棄しません。(私は os.remove コードが機能することを知っています。これは、残りの一時ファイルのいくつかに対してその関数を実行し、それらが問題なく削除されたためです。)
一時ファイルを削除できれば、ここにいくつかあればいいのですが。できない場合は、Python でファイルの名前を変更する方法はありますか?
これまでのところ、mkstemp が返す必要があるファイル ハンドルを取得する方法についていくつか提案を受けましたが、うまくいきません。デバッガーで見ると、整数とファイル パスしか表示されません。
アップデート!私はそれを修正したと思います: filepath[0] で os.close を呼び出すだけで、閉じたように見えます! みんな、ありがとう!ここに更新されたコードがあります
再度、感謝します。