在日期字段中查找无效值

时间:2018-07-11 05:34:03

标签: python python-2.7

我的文本文件的列为Date,并且日期列中的数据也有误,例如space和字符ABC。我只想将那些包含字符的记录保存到名为Error_file.txt的另一个文件中。

尝试:

import dateutil.parser as dparser
from dateutil.parser import parse

datelist = ["11/Jan/2018 01:01:00", "" ,"01/01/17", "2016-01-02","KK"]

def is_date(string):
    try:
        parse(string)
        return True
    except ValueError:
        return False

with open('output.txt', 'w') as output:
    with open('error_file.txt', 'w') as error:
        for i in datelist:
            if is_date(str(datelist)) == True:
                #WRITE TO Output File
                print dparser.parse(i, fuzzy=True).date()
            else:
                #WRITE TO Error File
                print('Error line')

在以上给出的内容中,KK中的记录应保存在Error_file.txt中。

但是得到以下输出:

Error line
Error line
Error line
Error line 
Error line

2 个答案:

答案 0 :(得分:4)

您需要将每个元素传递给函数。

例如:

from dateutil.parser import parse

datelist = ["11/Jan/2018 01:01:00", "" ,"01/01/17", "2016-01-02","KK"]

def is_date(string):
    try:
        parse(string)
        return True
    except ValueError:
        return False
for i in datelist:
    print is_date(i)         #Update 

答案 1 :(得分:2)

您不是将单个日期传递给要检查的函数,而是将整个列表传递给该函数。这会使函数每次都返回False

您必须像这样编辑代码才能解决问题

import dateutil.parser as dparser
from dateutil.parser import parse

datelist = ["11/Jan/2018 01:01:00", "" ,"01/01/17", "2016-01-02","KK"]

def is_date(string):
    try:
        parse(string)
        return True
    except ValueError:
        return False

with open('output.txt', 'w') as output:
    with open('error_file.txt', 'w') as error:
        for date in datelist:
            if is_date(date) == True:
                #WRITE TO Output File
                print(parse(date, fuzzy=True).date())
            else:
                #WRITE TO Error File
                print('Error line')


# Output

2018-01-11
Error line
2017-01-01
2016-01-02
Error line