8

私はpython2.6プログラミングが初めてです。私の目標は、osの一時ディレクトリに.txtまたは.xlsの「一時ファイル」を作成し、そこにデータを書き込むことです。読み取りの完了後、「一時ファイル」からデータを読み取りますデータ、一時ディレクトリから「一時ファイル」を削除します。

そのプロセスでは NamedTemporaryFile() を選択しますが、達成できません。どうすればそれを達成できるか提案していただけますか。よろしくお願いします。

>>> import os
>>> import tempfile
>>> with tempfile.NamedTemporaryFile() as temp:
            print temp.name
            temp.write('Some data')            
            f = open(os.path.join(tempfile.gettempdir(),temp.name))
            lines = f.readlines()
            f.close()
            temp.flush()


c:\users\110\appdata\local\temp\tmpf8p3kc

Traceback (most recent call last):
  File "<pyshell#3>", line 4, in <module>
    f = open(os.path.join(tempfile.gettempdir(),temp.name))
IOError: [Errno 13] Permission denied: 'c:\\users\\110\\appdata\\local\\temp\\tmpf8p3kc'
4

3 に答える 3

12

私が使用したアプローチは、 を使用file = tempfile.NamedTemporaryFile(..., delete=False)して、書き込みが完了した後に結果のファイルを閉じ、完了したら手動で呼び出すos.remove(file.name)ことです。(カスタム コンテキスト マネージャー__exit__のメソッドでファイルの削除を実行して、これを でより使いやすくすることができます。)with

于 2014-02-03T09:50:11.717 に答える
2

私は一度この問題を抱えた..

ドキュメントから: 「名前付きの一時ファイルがまだ開いている間に、その名前を使用してファイルをもう一度開くことができるかどうかは、プラットフォームによって異なります (Unix では使用できますが、Windows NT 以降では使用できません)。」

tempオブジェクトがまだ開いているときに、オブジェクトを使用してファイルから読み取ろうとしないのはなぜですか? モードで開いている場合w+bは、 seek() および read() できるはずです

于 2013-09-19T19:34:02.950 に答える
-1

名前付きの一時ファイルを作成するが、開いたままにしない代替メカニズムを作成しました。したがって、どこでも完全に使用できます。閉じるときに削除する代わりに、withブロックの最後に削除します。

shelljob pip パッケージをインストールします。ドキュメントからの使用例:

with fs.NamedTempFile() as nm:
    proc.call( "curl http://mortoray.com/ -o {}".format( nm ) )
    html = open(nm).read()
    print( len(html) )
于 2014-02-03T09:41:27.577 に答える