0

私はPythonにかなり慣れていないので、毎回異なる名前のファイルを作成できるように、変数をファイル名に入れる方法があるかどうか疑問に思っています。

私の特定のケースでは、ファイル名に日付と時刻を追加したいと思います。可能であれば、これは完全に機能します。

example = open("Path/to/file%s", "w") % str(datetime.now())

...しかし、そうではありません。別のアプローチを使用してそのような機能を取得する方法はありますか? どちらの方法でも、複数の言い回しを使用して答えを探してみましたが、賛成または反対を見つけることができません。

よろしくお願いします。

編集: それは、それに応じて調整された open() 関数であるはずでした。

4

4 に答える 4

4

これはうまくいくはずです。文字列内のプレースホルダーをフォーマットされた文字列 ( )format()に置き換えます。{0}datetimedatestr

>>> from datetime import datetime
>>> datestr = datetime.strftime(datetime.today(), "%Hh %Mm %Ss %A, %B %Y")
>>> examplefile = open("/home/michael/file{0}".format(datestr), 'w')
>>> print(examplefile)
<open file '/home/michael/file21h 20m 34s Monday, September 2012', mode 'w' at 0x89fcf98>
于 2012-09-11T03:11:24.090 に答える
1

古いスタイルのフォーマットを引き続き使用するように回答を変更するには、次の%ようにします。

example = open("Path/to/file%s" % datetime.now(), "w")

を呼び出したことに注意してくださいopen()。これはおそらくあなたがやりたいことです (そうでなければ、タプルを作成しているだけです)。また、%sフォーマット指定子を使用すると、引数が文字列に自動的に変換されるため、実際には . は必要ありませんstr()

于 2012-09-11T03:14:56.620 に答える
1

あなたの例がうまくいかない理由は、ファイルとは何の関係もありません。

example = ("Path/to/file%s", "w") % str(datetime.now())

上記は%、左側にタプル、右側に文字列を持つ演算子を使用しています。ただし、この%演算子は、文字列テンプレートに基づいて文字列を作成するためのもので、%. 左にタプルを置くのは意味がありません。

やりたいことをより基本的なステップに分割する必要があります。「現在の日付と時刻が名前に含まれるファイルを開きたい」から始めます。それを直接行う方法はありません。そのため、それについて何も見つけることができませんでした。ただし、ファイル名は単なる文字列であるため、文字列操作を使用して文字列を作成し、その文字列を開くことができます。したがって、あなたの問題は実際には「名前に日付/時刻を含むファイルを開くにはどうすればよいですか?」ではなく、「日付/時刻を他の情報と一緒に文字列に入れるにはどうすればよいですか?」. あなたはその質問に対する答えをすでに知っているようです:%フォーマットを使用してください。

意味あり; そうしないと、文字列だけでなくファイルに対しても可能なすべての文字列操作を実装する必要があります。また、文字列を使用する他のすべてのものについても同様です。それは (まともな) プログラミングのやり方ではありません。毎回ゼロから始めるのではなく、既存の操作を再利用できるようにしたいと考えています。

つまり、文字列操作 (ファイルとは何の関係もなく、最終的にこの文字列を使用してファイルを開くことを知らず、気にもしない) を使用して、ファイル名を作成します。次に、その文字列をファイルを開く関数に渡します(書き込み可能にすることを指定する文字列openと共に)。"w"

例えば:

filename = "Path/to/file%s" % datetime.now()
example = open(filename, "w")

必要に応じて、1 行に入れることができます。

example = open("Path/to/file%s" % datetime.now(), "w")

ただし、プログラミングや Python に比較的慣れていない場合は、一般的な操作に慣れるまで、小さなステップを分割しておくことをお勧めします。

于 2012-09-11T03:25:04.337 に答える
0

ここに投稿されたすべての回答は、問題を正しく識別します。つまり、文字列のフォーマットが正しくありません。

また、最終的な文字列が、ファイルを作成しようとしているオペレーティングシステムの有効なファイル名であることも確認する必要があります。

この例では、Windowsで有効なファイル名が生成されません。また、Linuxでも機能しますが、作成されるファイル名は期待どおりではありません。

>>> f = open(str(datetime.datetime.now()),'w')
>>> f.write('hello\n')
>>> f.close()
>>> quit()

-rw-r--r-- 1 burhan burhan 6 Sep 11 06:53 2012-09-11 06:53:04.685335

Windowsでは、まったく機能しません。

>>> open(str(datetime.datetime.now()),'w')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 22] invalid mode ('w') or filename: '2012-09-11 06:51:26.873000'

これはより良いオプションです(2.6+):

filename = "Path/to/file/{0.year}{0.month}{0.day}".format(datetime.now())

古いバージョンのPythonの場合、従来のオプションを使用できます。

filename = "Path/to/file/%s" % datetime.strftime(datetime.now(),"%Y%m%d")
于 2012-09-11T04:03:46.200 に答える