3

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

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

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

4

3 回答 3

3

只需使用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 已经准备就绪。

于 2013-11-02T02:37:04.890 回答
1

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

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

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

于 2013-11-02T02:35:44.010 回答
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)
    # ...
于 2013-11-02T02:37:40.817 回答