我的文本文件的列为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
答案 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