Làm cách nào để tạo tên tệp với ngày & giờ hiện tại bằng python?


173

Đây là một mã chức năng (Tạo tập tin thành công)

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

Bây giờ tôi đang cố gắng đặt tên tệp theo Ngày hiện tại (Tôi không phải là chuyên gia về python)

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

Tôi muốn viết tên tệp với ngày giờ chính xác, đó là tệp xml, chương trình đã tạo, tôi chỉ cần đặt tên tệp. Các mã trên không hoạt động.

[EDITED] - Lỗi được trả lại

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

bạn cần một =khoảng giữa filenamedatetime
Joel Cornett

Ngoài ra, chính xác thì "mã trên không hoạt động" như thế nào?
Joel Cornett

Khi trình bày một câu hỏi như thế này, "không hoạt động" là không đủ. Mô tả chính xác làm thế nào nó thất bại.
David Heffernan

1
Bạn có ý nghĩa gì khi không làm việc? Nó có tạo ra lỗi không? Bạn mong đợi kết quả là gì? Thật không hữu ích khi chỉ nói "nó không hoạt động".
Joel Cornett

1
Đúng! Tôi đã làm đúng, ngoại trừ phần này -> datetime.now () đó là -> datetime.datetime.now () nhưng tôi đang sử dụng thời gian bây giờ .. hãy xem -> filenames = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (tên tệp + '.xml', 'w')
deepcell

Câu trả lời:


359

Trong khi không sử dụng datetime, điều này giải quyết vấn đề của bạn (trả lời câu hỏi của bạn) về việc nhận chuỗi với định dạng ngày và giờ hiện tại mà bạn chỉ định:

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

sản lượng:

20120515-155045

vì vậy tên tệp của bạn có thể nối thêm hoặc sử dụng chuỗi này.


1
Gotcha! thời gian không được xác định trong kịch bản của tôi và tôi đã cố gắng sử dụng tính năng hẹn giờ (không hoạt động, tôi không hiểu tại sao), nhưng với thời gian thì rõ ràng, tên tệp được tạo thành công. Cảm ơn bạn rất nhiều!
deepcell

2
Tôi không biết tại sao bạn chấp nhận câu trả lời này khi có hai câu trả lời giải thích hoàn toàn chính xác những gì sai với mã trong câu hỏi. Không có gì chống lại cách Levon làm điều này, nó hoạt động tốt, nhưng khi bạn nói "không hoạt động, tôi không biết tại sao", điều đó có vẻ kỳ lạ bởi vì bạn có câu trả lời giải thích tại sao.
David Heffernan

Khi tôi thử mã ở trên, tôi nhận được một lỗi, "E AttributionError: 'int' object không có thuộc tính 'strftime'".
rwbyrd

@rwbyrd Thật kỳ lạ, tôi chỉ thử 3 dòng chính xác (sao chép-dán) với Python 3.4.1 và 2.7.6 và nó hoạt động - mặc dù với Python 3 bạn cần sử dụng print(timestr). Bạn đã sao chép văn bản này từ trên? Có lẽ là một lỗi đánh máy?
Levon

3
@rwbyrd Có lẽ bạn có một biến int gọi là "time" ở đâu đó trong phạm vi đang che khuất timemô-đun.
Thomas

38

nowlà một phương thức lớp datetimetrong lớp trong mô-đun datetime. Vì vậy bạn cần

datetime.datetime.now()

Hoặc bạn có thể sử dụng nhập khác

from datetime import datetime

Thực hiện theo cách này cho phép bạn sử dụng datetime.nowtheo mã trong câu hỏi.


35

Thay đổi dòng này

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

Đến

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

Lưu ý thêm datetime. Ngoài ra, thay đổi import datetimethànhfrom datetime import datetime


1
@ B4NZ41 Điều đó không đúng. Thông báo lỗi làm rõ rằng mã của bạn có import datetimeở đâu đó.
David Heffernan

;) Lấy làm tiếc! NGAY BÂY GIỜ Tôi đang sử dụng thời gian nhập, trước khi tôi sử dụng datetime nhập
deepcell

2
@ B4NZ41 Không quan trọng bạn đang làm gì bây giờ. Nó quan trọng những gì trong câu hỏi.
David Heffernan

16

Điều này là nhiều người có thể đọc được.

from datetime import datetime

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

Có nhưng sắp xếp theo tên sẽ không sắp xếp theo thứ tự thời gian
Peter

Tôi đoán rằng chỉ cần YYMMDD thay vì DDMMYY?
Dev Aggarwal

5

Tôi ngạc nhiên không có một số trình định dạng duy nhất trả về một mặc định (và an toàn) 'để nối thêm vào tên tệp' - định dạng của thời gian, chúng ta có thể viết một cách đơn giản FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

2

Đây là một số thứ mà tôi cần để đưa dấu thời gian vào tên thư mục để bỏ các tệp từ một trình quét 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)

Một cách an toàn hơn để tạo đường dẫn của bạn, có thể là: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(cũng là một import shutiltuyên bố có thể thay thế import ostuyên bố)
oneindelijk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.