วิธีสร้างชื่อไฟล์ด้วยวันที่ & เวลาปัจจุบันในไพ ธ อน


173

นี่คือรหัสการทำงาน (สร้างไฟล์ที่สำเร็จ)

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

ตอนนี้ฉันกำลังพยายามตั้งชื่อไฟล์ด้วย Date Date ปัจจุบัน (ฉันไม่ใช่ผู้เชี่ยวชาญใน 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'

คุณต้องการ=ระหว่างfilenameและdatetime
Joel Cornett

นอกจากนั้น "รหัสด้านบนไม่ทำงาน" อย่างแม่นยำเพียงใด?
Joel Cornett

เมื่อแสดงคำถามเช่นนี้ "ไม่ทำงาน" ไม่เพียงพอ อธิบายอย่างชัดเจนว่ามันล้มเหลวอย่างไร
David Heffernan

1
คุณหมายถึงอะไรโดยไม่ทำงาน มันสร้างข้อผิดพลาดหรือไม่? คุณคาดหวังผลที่จะเป็นอย่างไร การพูดว่า "ไม่ทำงาน" ไม่เป็นประโยชน์มากนัก
Joel Cornett

1
ใช่ ฉันทำถูกต้องยกเว้นในส่วนนี้ -> datetime.now () มันคือ -> datetime.datetime.now () แต่ฉันใช้เวลาตอนนี้ .. ลองดู -> ชื่อไฟล์ = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = เปิด (ชื่อไฟล์ + '.xml', 'w')
deepcell

คำตอบ:


360

ในขณะที่ไม่ได้ใช้datetimeสิ่งนี้จะแก้ปัญหาของคุณ (ตอบคำถามของคุณ) ในการรับสตริงที่มีรูปแบบเวลาและวันที่ปัจจุบันที่คุณระบุ:

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

อัตราผลตอบแทน:

20120515-155045

ดังนั้นชื่อไฟล์ของคุณสามารถผนวกหรือใช้สตริงนี้


1
Gotcha! เวลาไม่ได้ถูกกำหนดไว้ในสคริปต์ของฉันและฉันพยายามใช้เวลา (ไม่ทำงานฉันไม่ได้ว่าทำไม) แต่ด้วยเวลาที่ชัดเจนตอนนี้ชื่อไฟล์ถูกสร้างขึ้นด้วยความสำเร็จ ขอบคุณมาก!
deepcell

2
ฉันไม่รู้ว่าทำไมคุณยอมรับคำตอบนี้เมื่อมีสองคำตอบที่อธิบายได้อย่างสมบูรณ์ว่าเกิดอะไรขึ้นกับรหัสในคำถาม ไม่มีทางใดที่ Levon ทำเช่นนี้ทำงานได้ดี แต่เมื่อคุณพูดว่า "ไม่ทำงานฉันไม่รู้ว่าทำไม" ดูเหมือนแปลกเพราะคุณมีคำตอบที่อธิบายว่าทำไม
David Heffernan

เมื่อฉันลองรหัสข้างต้นฉันได้รับข้อความ "E AttributeError: 'int' วัตถุไม่มีข้อผิดพลาด 'strftime'"
rwbyrd

@rwbyrd นั่นคือแปลกฉันก็พยายามเหล่านั้นแน่นอน 3 สาย (copy-paste) กับงูหลาม 3.4.1 และ 2.7.6 และการทำงาน - แม้ว่ากับงูหลาม 3 print(timestr)คุณจำเป็นต้องใช้ คุณคัดลอกข้อความนี้จากด้านบนหรือไม่? บางทีพิมพ์ผิดอย่างอื่น?
Levon

3
@rwbyrd คุณอาจมีตัวแปร int ที่เรียกว่า "เวลา" อยู่ในขอบเขตที่แชโดว์timeโมดูล
โทมัส

38

nowเป็นวิธีการเรียนในชั้นเรียนในโมดูลdatetime 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

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'

ใช่ แต่เรียงลำดับตามชื่อจะไม่เรียงตามลำดับ
ปีเตอร์

ฉันเดาว่าต้องใช้ YYMMDD แทนที่จะเป็น DDMMYY ใช่ไหม
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.