【问题标题】:Generate a sorted list of birthday dates and append each date to a newline in a file生成生日日期的排序列表并将每个日期附加到文件中的换行符
【发布时间】:2018-06-28 15:02:54
【问题描述】:

所以,我一直在尝试生成一个包含生日日期的单词表。我正在尝试将每个值附加到文件birdthday_wordlist.txt 中的换行符。文件和格式应该是这样的:

01/01/1998
02/01/1998
03/01/1998
dd/mm/yyyy
12/12/2000

我只能使用这样的脚本生成 dd、mm 或 yyyy:

with open('XXXXXX_wordlist.txt', 'w') as birdthday_wordlist:
for i in range(1980, 2000):
    birdthday_wordlist.write('{}\n'.format(i))

我知道有办法,现在我想不通。

【问题讨论】:

  • 如果您需要并行遍历范围,请使用zip,尽管这不会考虑天数不同的月份
  • 抱歉,我不明白你在问什么。您要在哪里对值进行排序?
  • 请添加您拥有的原始文件的示例,由于您只显示了结果文件,因此很难理解您的要求。
  • 感谢大家抽出宝贵时间,如果我的问题不能更清楚,我很抱歉。我刚刚得到了答案^^

标签: python list generate word-list


【解决方案1】:

如果我明白你在问什么,它与here的问题非常相似

我已经修改了将日期写入文件的答案:

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(1980, 1, 1)
end_date = date(2000, 1, 1)
with open('XXXXXX_wordlist.txt', 'w+') as birdthday_wordlist:
    for single_date in daterange(start_date, end_date):
        birdthday_wordlist.write('%s\n' % single_date.strftime("%d/%m/%Y"))

将输出:

01/01/1980
02/01/1980
03/01/1980
04/01/1980
05/01/1980
...
31/12/1999

【讨论】:

  • 谢谢你!它很完美,也是我需要的。我真的很感激。
【解决方案2】:

您可以使用 while 和 datetime 函数。您可以根据需要设置 ini 日期以及所需的结束日期。每次迭代总计 1 天

import datetime

ini=datetime.date(year=1980,month=1,day=1)
end=datetime.date(year=2000,month=1,day=1)
while ini<=end:
    birdthday_wordlist.write(ini.strftime('%d/%m/%Y')+'\n')
    ini=ini+datetime.timedelta(days=1)

【讨论】:

  • 那是怎么排序的?
  • 我相信 OP 想要前导零,即 01/01/1980、02/01/1980 等。
  • 使用这种格式,他会得到前导零 '%d/%m/%Y'
  • 老实说,我不明白这一点,也许是我吃不起眼的馅饼的时候了。请解释我没有看到什么。
  • 先生。 @nacho 感谢您的时间和贡献。您的代码的问题是,当我运行它时,我有一个 1.8 GB 的文件,其中包含几千万行,每行中唯一的值 01/01/1980 ......我的计算机内存溢出并且我不得不强制退出一切并重新启动机器。
【解决方案3】:

如果您想要一个不使用导入包的解决方案,您可以执行以下操作:

data = []
f_string = "%02d/%02d/%04d\n" # Will be presented as dd/mm/yyyy format

for year in range(1980, 2000):
    for month in range(1, 12):
        for day in range(1, 31):
            data.append(f_string % (day, month, year))

with open('XXXXXX_wordlist.txt', 'w') as birthday_wordlist:    
    for item in data:
        birthday_wordlist.write(item)

【讨论】:

  • @musikrek 非常感谢您的时间和帮助。我刚刚注意到您的代码导致了 Traceback(最近一次调用最后一次):文件“new.py”,第 10 行,在 birthday_wordlist.write(data) TypeError: expected a string or other character buffer object 所以我只是str(data) 并且它有效,但我在一行中以这种格式得到了许多日期:'13/01/1980\n', '14/01/1980\n', '15/01/1980\n', ' 16/01/1980\n', '17/01/1980\n', '18/01/1980\n', ...
  • 我很抱歉。错误是我正在编写文件,这没有任何意义。相反,我应该将项目写入data 变量中,就像我现在所做的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2011-07-10
相关资源
最近更新 更多