Pythonで現在の日付と時刻でファイル名を作成する方法は?


173

これが機能コードです(成功したファイルを作成します)

sys.stdout = open('filename1.xml', 'w')

今私は現在の日時でファイルに名前を付けようとしています(私はPythonの専門家ではありません)

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.xml', 'w')

正確な日時でファイル名を書きたいのですが、それはxmlファイルであり、プログラムが既に作成したものです。ファイルに名前を付けるだけです。上記のコードは機能していません。

[編集済み] -返されたエラー

  File "./fix.py", line 226, in <module>
    filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'

あなたが必要とする=filenamedatetime
ジョエル・コルネット

それ以外に、「上記のコードが機能していない」とはどの程度正確なのでしょうか。
Joel Cornett、

このような質問をする場合、「機能しない」だけでは不十分です。どのように失敗するかを正確に説明してください。
デビッドヘ

1
仕事をしないとはどういう意味ですか?エラーが発生しますか?結果はどうなると思いますか?「うまくいかない」とだけ言ってもあまり役に立ちません。
Joel Cornett、2012年

1
はい!私は正しいですが、この部分を除いて-> datetime.now()です-> datetime.datetime.now()ですが、今は時間を使用しています..見てください-> filenames = time.strftime( "%Y%m %d-%H%M%S ")sys.stdout = open(filenames + '.xml'、 'w')
deepcell

回答:


360

を使用していない場合datetime、これにより、指定した現在の日時形式の文字列を取得するという問題が解決します(質問に回答します)。

import time
timestr = time.strftime("%Y%m%d-%H%M%S")
print timestr

利回り:

20120515-155045

したがって、ファイル名でこの文字列を追加または使用できます。


1
ゲッチャ!時間はスクリプトで定義されておらず、timedateを使用しようとしましたが(動作せず、理由はわかりません)、時間の経過とともにファイル名が正常に作成されました。どうもありがとうございます!
ディープセル

2
質問のコードの何が問題であったかを完全に説明する2つの回答があるときに、なぜこの回答を受け入れたのかわかりません。Levonがこれを行った方法に反することは何もありませんが、正常に機能しますが、「機能しない、理由がわからない」と言うと、理由を説明する回答があるため、奇妙に見えます。
David Heffernan

上記のコードを試したところ、「E AttributeError: 'int' object has no attribute 'strftime'」エラーが発生しました。
rwbyrd 2015

@rwbyrd奇妙なことに、Python 3.4.1と2.7.6で正確に3行(コピーと貼り付け)を試してみましたが、動作しますprint(timestr)。ただし、Python 3では使用する必要があります。このテキストを上からコピーしましたか?おそらくそれ以外の場合はタイプミスですか?
レボン

3
@rwbyrdおそらく、timeモジュールをシャドウしているスコープのどこかに「time」と呼ばれるint変数があるでしょう。
Thomas

38

nowdatetimeモジュールのクラスのクラスメソッドですdatetime。だからあなたは必要です

datetime.datetime.now()

または、別のインポートを使用できます

from datetime import datetime

このようにdatetime.nowして、問題のコードに従って使用することができます。


35

この行を変更

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")

余分に注意してくださいdatetime。また、あなたの変更 import datetimeにはfrom datetime import datetime


1
@ B4NZ41それは真実ではありません。エラーメッセージは、コードがimport datetimeどこかにあることを明確にします。
David Heffernan

;) ごめんなさい!現在、インポート日時を使用する前は、インポート時間を使用しています
deepcell '15年

2
@ B4NZ41あなたが今何をしているかは関係ありません。何が問題なのかが重要です。
David Heffernan

16

これはもっと人間が読める形式です。

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'

はい、ただし名前で並べ替えても年代順に並べ替えられません
Peter

DDMMYYではなくYYMMDDが必要なだけでしょうか?
Dev Aggarwal

5

「ファイル名に追加するための」デフォルト(および安全)を返す単一のフォーマッタがないことに驚いています-時間のフォーマット。 FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

"%x" instead of "%Y%m%d-%H%M%S"

2

Webスクレイパーからファイルをダンプするために、フォルダー名に日時スタンプを含めるために必要なものがいくつかあります。

# import time and OS modules to use to build file folder name
import time
import os 

# Build string for directory to hold files
# Output Configuration
#   drive_letter = Output device location (hard drive) 
#   folder_name = directory (folder) to receive and store PDF files

drive_letter = r'D:\\' 
folder_name = r'downloaded-files'
folder_time = datetime.now().strftime("%Y-%m-%d_%I-%M-%S_%p")
folder_to_save_files = drive_letter + folder_name + folder_time 

# IF no such folder exists, create one automatically
if not os.path.exists(folder_to_save_files):
    os.mkdir(folder_to_save_files)

パスを作成するより安全な方法は次のようになりますfolder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)import shutilステートメントでもステートメントを置き換えることができますimport os
oneindelijk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.