306

xPythonを使用してパス付きのファイルを作成したいと思います。私はos.system(y)whereを使用していy = 'touch %s' % (x)ます。の非ディレクトリ バージョンを探しましたが、os.mkdir何も見つかりませんでした。ファイルを開かずに、またはシステムまたは popen/subprocess を使用せずにファイルを作成するためのこのようなツールはありますか?

4

2 に答える 2

539

ファイルを開かずにファイルを作成する方法はありませんos.mknod("newfile.txt")ただし、OSXではroot権限が必要です)。ファイルを作成するためのシステムコールには、実際open()にはO_CREATフラグが付いています。したがって、どのような場合でも、常にファイルを開きます。

したがって、ファイルが存在する場合に切り捨てずにファイルを作成する最も簡単な方法は次のとおりです。

open(x, 'a').close()

.close()実際には、CPythonのrefcounting GCはステートメントが終了した直後にそれを閉じるため、省略できますがopen()、明示的に行う方がクリーンであり、CPython固有の動作に依存することも適切ではありません。

の動作が必要な場合touch(つまり、ファイルが存在する場合はmtimeを更新します):

import os
def touch(path):
    with open(path, 'a'):
        os.utime(path, None)

これを拡張して、パスに存在しないディレクトリを作成することもできます。

basedir = os.path.dirname(path)
if not os.path.exists(basedir):
    os.makedirs(basedir)
于 2012-09-29T17:25:22.423 に答える
59

もちろん、開かずにファイルを作成する方法があります。電話するのと同じくらい簡単os.mknod("newfile.txt")です。唯一の欠点は、この呼び出しには OSX の root 権限が必要なことです。

于 2015-08-02T15:00:33.793 に答える