python - 使用 python strftime() 识别文本文件中月份和日期没有零填充的日期值

标签 python datetime strftime

我正在读取一个文本文件,其中一列(第三列)包含不同日期格式的日期值以及其他数据类型(字符串、数字等)。我正在识别输入文件中的每个唯一日期格式,并将每个日期格式的值输出到文本文件。我在输入文件中查找的日期格式之一是 - 月 dd,YYYY。

例如2001 年 5 月 1 日。

我正在使用 python strftime() 函数在我的文件中搜索上述日期格式。但是,我下面提供的代码仅输出带零填充的日期值。

例如2001 年 5 月 1 日

但是,我需要我的程序也能找到没有零填充的日期值,我知道输入文件中存在这种情况,例如:

2001 年 5 月 1 日

2012年2月4日

我在论坛中搜索了解决方案,其中大部分涉及删除/替换零。但是,这并不能解决我的问题,因为我正在文件中搜索零填充和非零填充日期值。
我还尝试在日期格式中的“%”符号后面添加“-”符号,但它不起作用。我在下面提供了我的代码。谁能引导我走向正确的方向?我使用 Pycharm CE 2017.2 和 python 3.6.3 解释器。

我的代码:

# Identifying Month dd, yyyy date format

from datetime import datetime

import csv

with open('file1.csv', 'r') as f_input, open('file2.txt', 'w') as f_output:

    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)

    for row in csv_input:
        for date_format in ['%B %d, %Y']:
            try:
                converted = datetime.strptime(row[3], date_format)
                csv_output.writerow([row[0], row[1], row[2], converted.strftime(date_format), row[4]])
            except ValueError:
                pass

最佳答案

使用datetime.strptime() 可靠地完成您想要的操作非常非常困难。我可以从您的代码中看到您已经计划拥有多个日期格式字符串(否则您的日期格式字符串不会位于 1 列表中)。

尝试这种方法:

>>> from dateutil import parser
>>> parser.parse("May 1, 2001")
datetime.datetime(2001, 5, 1, 0, 0)
>>> parser.parse("May 01, 2001")
datetime.datetime(2001, 5, 1, 0, 0)
>>> parser.parse("2/4/2012")
datetime.datetime(2012, 2, 4, 0, 0)
>>> parser.parse("02/04/2012")
datetime.datetime(2012, 2, 4, 0, 0)

所以,而不是

for row in csv_input:
    for date_format in ['%B %d, %Y']:
        try:
            converted = datetime.strptime(row[3], date_format)
            csv_output.writerow([row[0], row[1], row[2], converted.strftime(date_format), row[4]])
        except ValueError:
            pass

for row in csv_input:
    converted = parser.parse(row[3])
    csv_output.writerow([row[0], row[1], row[2], converted.strftime('%B %d, %Y'), row[4]])

这会将您输入的所有日期转换为标准格式,例如“2001 年 5 月 1 日”。我省略了您的 try... except 因为它可以捕获 strptime() 失败和 parser.parse() 的情况> 会很好地完成你传递的任何内容,只要它不是完全无意义的,在这种情况下,你不应该想默默地抑制异常。

dateutil 不在标准库中,但非常值得安装。

关于python - 使用 python strftime() 识别文本文件中月份和日期没有零填充的日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531163/

相关文章:

python - python是facebook开发的稳定平台吗?

java - 格式化日期以用于 Java 中的文本到语音转换

C# 反射 : Emit DateTime Property Value

datetime - Dart/Flutter 获得本周的第一个 DateTime

c - snprintf 不使用 strftime 打印转换后的 timeval?

awk - 用小数秒创建时间戳

c - 如何将以微秒为单位的字符串转换为C中的struct tm?

python - 在 Python 中使用回调显示异步行为的最小可重现示例

python - 在matplotlib中设置error bars的显示范围subplot

Python-can OSError : An address incompatible with the requested protocol was used