파이썬에서 현재 날짜와 시간으로 파일 이름을 만드는 방법은 무엇입니까?


173

기능 코드는 다음과 같습니다 (성공적으로 파일 작성).

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

이제 현재 날짜 시간으로 파일 이름을 지정하려고합니다 (파이썬 전문가는 아닙니다)

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

이와 같은 질문을 제시 할 때 "작동하지 않음"으로는 충분하지 않습니다. 그것이 어떻게 실패하는지 정확하게 설명하십시오.
David Heffernan

1
일하지 않는다는 것은 무슨 뜻입니까? 오류가 발생합니까? 결과는 어떻습니까? "작동하지 않습니다"라고 말하는 것은 그리 도움이되지 않습니다.
Joel Cornett

1
예! 이 부분을 제외하고는 올바르게 수행했습니다.-> datetime.now ()-> datetime.datetime.now ()이지만 지금은 시간을 사용하고 있습니다. % d- % H % M % S ") sys.stdout = open (파일 이름 + '.xml', 'w')
딥셀

답변:


360

을 사용하지 않으면 datetime현재 시간 및 날짜 형식으로 문자열을 얻는 문제 (질문에 대한 답변)가 해결됩니다.

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

수율 :

20120515-155045

파일 이름으로이 문자열을 추가하거나 사용할 수 있습니다.


1
잡았다! 시간이 내 스크립트에 정의되어 있지 않고 timedate (작동하지 않음, 이유는 아님)를 사용하려고했지만 시간이 지남에 따라 파일 이름이 성공적으로 만들어졌습니다. 정말 고맙습니다!
deepcell 2016 년

2
질문의 코드에 무엇이 잘못되었는지 완벽하게 설명하는 두 가지 답변이있을 때 왜이 답변을 수락했는지 모르겠습니다. Levon 이이를하는 방식에 반대하는 것은 아무것도 없지만 잘 작동하지만 "작동하지 않습니다. 왜 그런지 모르겠습니다"라고 대답하면 이유를 설명하는 답변이 있기 때문에 이상하게 보입니다.
David Heffernan

위의 코드를 시도 할 때 "E AttributeError : 'int'개체에 'strftime'특성이 없습니다. '오류가 발생했습니다.
rwbyrd

@rwbyrd 이상하게도 Python 3.4.1 및 2.7.6으로 정확한 3 줄 (복사 붙여 넣기)을 시도했지만 작동하지만 Python 3에서는 사용해야 print(timestr)합니다. 이 텍스트를 위에서 복사 했습니까? 그렇지 않으면 오타일까요?
Levon

3
@rwbyrd 아마도 범위 내에 time모듈을 가리고있는 "time"이라는 int 변수가있을 것입니다 .
토마스

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
사실이 아닙니다. 오류 메시지는 코드에 import datetime어딘가에 있음을 분명히합니다 .
David Heffernan

;) 죄송합니다! 이제 가져 오기 시간을 사용하고 있습니다. 가져 오기 날짜 시간을 사용하기 전에
deepcell

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

다음은 웹 스크레이퍼에서 파일을 덤프하기 위해 폴더 이름에 날짜-시간 스탬프를 포함시켜야하는 몇 가지 사항입니다.

# 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.