在python中,如何从文本文件中仅获取日期

在python中,如何从文本文件中仅获取日期,python,python-3.x,list,Python,Python 3.x,List,我有一个非常大的文本文件,我正在用python阅读它。 我已在读取模式下打开文件,在变量中获取数据。现在我只想要它的日期。所以我使用readline()函数读取,并应用for循环,用逗号分割每行结果,得到索引[0]的结果。这样我就可以得到一份日期清单。但在文本文件中,某些部分如下所示。正因为如此,我的输出中也会出现‘比特数为4’,‘然后是函数si’,‘获取一个字符变量’ 10/04/2020, 03:05 - ABC: Like if number is 0011 0111 And bitNum

我有一个非常大的文本文件,我正在用python阅读它。 我已在读取模式下打开文件,在变量中获取数据。现在我只想要它的日期。所以我使用readline()函数读取,并应用for循环,用逗号分割每行结果,得到索引[0]的结果。这样我就可以得到一份日期清单。但在文本文件中,某些部分如下所示。正因为如此,我的输出中也会出现‘比特数为4’,‘然后是函数si’,‘获取一个字符变量’

10/04/2020, 03:05 - ABC: Like if number is 0011 0111
And bitNumber is 4 
Then function si
10/04/2020, 03:08 - ABC: Question 6
Take a char variable, apply a same as number
10/04/2020, 03:08 - ABC: Example If my variable is 0X3C answer should be same
我要做的是避免在输出中获取“And bitNumber is 4”,“然后是函数si”,“Take a char variable”,应该只获取日期

for row_data in data_collected:
    print(row_data.split(',')[0])

您可以使用正则表达式查找该格式的日期:

import re
....
for row_data in data_collected:
    if  re.match(r'\d\d/\d\d/\d\d\d\d',row_data):
        print(row_data.split(',')[0])

它将以nn/nn/nnnn的形式捕获日期(正则表达式中的\d表示匹配任何数字)

将每个可能的日期传递给
datetime.strtime
。如果它看起来不像日期,则会引发
ValueError
。假设所有日期的格式相同:

from datetime import datetime

dates = []
for row in data:
    date = row.split(',', 1)[0]
    try:
        date = datetime.strptime(date, '%m/%d/%Y')
        dates.append(date)
    except ValueError:
        continue

好处:现在您有了对象而不仅仅是字符串。

您可以使用正则表达式提取数据,如下所示

import re
dates = []
with open('sample.txt','r') as f:
    for l in f.readlines():
        match = re.search(r'\d{2}/\d{2}/\d{4}', l)
        if match is not None:
            dates.append(match.group())

这是最灵活的方法,它适用于任何分隔符

你的正则表达式
“(?P0[1-9]|[12][0-9]|[3[01])(?p[-/.])(?P0[1-9]| 1[012])\2(?p(?:19 | 20)\d\d)”
假设您的数据是字符串
“X”

我们会这样做

import re

result_list = re.findall("(?P<day>0[1-9]|[12][0-9]|3[01])(?P<delimiter>[- /.])(?P<month>0[1-9]|1[012])\2(?P<year>(?:19|20)\d\d)", x)
重新导入
结果(u list=re.findall(P0[1-9]|[12][0-9]|[3[01])(P[-/.])(P0[1-9]| 1[012])\2(?P(?:19 | 20)\d\d),x)

我会使用a来查找与您要查找的格式匹配的行,而不是使用字符串拆分。如果我们有专门用于解析日期/时间的实用程序,则无需使用正则表达式。看看我的答案。