如何自动命名每个后续.CSV文件的截尾日期?

时间:2013-11-02 02:31:08

标签: python csv filenames file-io

我想每天运行此代码并自动将其写入.csv文件。我确定我是否希望每天都有自己的文件,或者每天都要修改现有文件。如果我选择前者,这是我认为我想要的,我希望每个文件都自动命名为代码运行的日期。目前我知道如何写入每次运行代码时都会被覆盖的单个文件。我已经这样做了:

str1 = "\n".join(data)
outFile = open('sampledata.csv', 'write')
outFile.write(str1)
outFile.close()

如何对此进行编码以便每次自动保存到新的.csv文件,并使用代码运行日期命名每个后续文件?

3 个答案:

答案 0 :(得分:2)

只需使用datetime模块datetime.now()功能即可获取当前日期和时间。如果您需要特定格式,请使用strftime功能选择所需的确切格式。否则,只需使用datetime.datetime.now().date().isoformat()即可选择合理的默认设置。

>>> import datetime
>>> now = datetime.datetime.now()
>>> now.strftime("%Y-%m-%d")
'2013-11-01'
>>> datetime.datetime.now().date().isoformat()
'2013-11-01'

带上您的代码,最后是:

import datetime
str1 = "\n".join(data)

# Get the current date and time
now = datetime.datetime.now()
now_str = now.strftime("%Y-%m-%d")

# Write out to a file for today
outfilename = 'sampledata-{}.csv'.format(now_str)

outFile = open(outfilename, 'write')
outFile.write(str1)
outFile.close()

如果您需要小时,分钟,秒和微秒,请不要拨打当前电话(它会截断时间戳):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-11-01T21:55:45.465662'

但是,如果你在Windows上运行它,它就不会接受':'在文件名中。 Linux和Mac已经准备好了。

答案 1 :(得分:1)

最好的方法是让它运行一个循环或存储一个状态变量,这样每次后续运行都会增加,即

str1 = "\n".join(data)
outFile = open('sampledata'+str(i)+'.csv', 'write')
outFile.write(str1)
outFile.close()

在我的代码中,'i'只是一个跟踪代码中某处的整数值。

答案 2 :(得分:0)

您可以在文件名上使用字符串格式以包含所需的日期或任何其他数据。例如,以下是如何将YYYY-MM-DD日期附加到文件名的末尾,就在扩展名之前:

today = datetime.datetime.now().date()
filename = "sampledata{}.csv".format(today.isoformat())

with open(filename, 'w', newline="") as outFile:
    writer = csv.writer(outFile)
    # ...