Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何忽略无效的字符串_Python_Python 3.x - Fatal编程技术网

Python 如何忽略无效的字符串

Python 如何忽略无效的字符串,python,python-3.x,Python,Python 3.x,在上面的代码中,我基本上通过了一些随机列表,如果我看到一个有效日期格式的字符串,我想将其添加到另一个名为日期列表的列表中 我只想添加有效日期格式的字符串,这意味着如果我看到随机字符串“foo”,我想忽略它,而不是将其附加到日期列表中 我想处理这件事的最好和最具蟒蛇式的方法是什么 理想情况下,如果有一些布尔函数可以告诉我正在查看的字符串是否是日期,那么当验证返回True时,我就可以将字符串附加到date\u列表中 我想知道如何正确处理这个问题。这是一个很好的方法,您可以使用列表理解或使用过滤器函数

在上面的代码中,我基本上通过了一些
随机列表
,如果我看到一个有效日期格式的字符串,我想将其添加到另一个名为
日期列表
的列表中

我只想添加有效日期格式的字符串,这意味着如果我看到随机字符串“foo”,我想忽略它,而不是将其附加到
日期列表中

我想处理这件事的最好和最具蟒蛇式的方法是什么

理想情况下,如果有一些布尔函数可以告诉我正在查看的字符串是否是日期,那么当验证返回True时,我就可以将字符串附加到
date\u列表中


我想知道如何正确处理这个问题。

这是一个很好的方法,您可以使用列表理解或使用
过滤器
函数来实现它

import datetime

random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = []

for item in random_list:
    try:
        date = datetime.datetime.strptime(item, "%Y-%m-%d")
        date_list.append(date)
    except ValueError:
        print("Not a valid date foramt")


print(date_list)
两者都将为您提供:

random_list = ["lol", "2020-10-05", "2020-09-11"]

def validate(date_text):
    try: datetime.datetime.strptime(date_text, '%Y-%m-%d'); return True
    except ValueError: return False

random_list = list(filter(validate, random_list))

print(random_list)

#or 

[i for i in random_list if validate(i)]

如果要转换它,最简单的方法是使用列表理解过滤器


这是一个非常好的方法,您可以使用列表理解或使用
filter
函数来实现它

import datetime

random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = []

for item in random_list:
    try:
        date = datetime.datetime.strptime(item, "%Y-%m-%d")
        date_list.append(date)
    except ValueError:
        print("Not a valid date foramt")


print(date_list)
两者都将为您提供:

random_list = ["lol", "2020-10-05", "2020-09-11"]

def validate(date_text):
    try: datetime.datetime.strptime(date_text, '%Y-%m-%d'); return True
    except ValueError: return False

random_list = list(filter(validate, random_list))

print(random_list)

#or 

[i for i in random_list if validate(i)]

如果要转换它,最简单的方法是使用列表理解过滤器


因为您使用的是特定格式YYYY-MM-DD,所以您可以通过正则表达式轻松地完成它。大概是这样的:

[datetime.datetime(2020, 10, 5, 0, 0), datetime.datetime(2020, 9, 11, 0, 0)]
我得到这个结果:

import re
import datetime
rDate = re.compile(r'^\d\d\d\d-\d\d-\d\d$')

isDate = lambda d: rDate.match(d)
toDate = lambda d: datetime.datetime.strptime(d, "%Y-%m-%d")

random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = list(map(toDate, filter(isDate, random_list)))

print(date_list)

因为您使用的是特定格式YYYY-MM-DD,所以您可以通过正则表达式轻松地完成它。大概是这样的:

[datetime.datetime(2020, 10, 5, 0, 0), datetime.datetime(2020, 9, 11, 0, 0)]
我得到这个结果:

import re
import datetime
rDate = re.compile(r'^\d\d\d\d-\d\d-\d\d$')

isDate = lambda d: rDate.match(d)
toDate = lambda d: datetime.datetime.strptime(d, "%Y-%m-%d")

random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = list(map(toDate, filter(isDate, random_list)))

print(date_list)

这看起来和听起来更像codereview。这看起来和听起来更像codereview。没有必要进行
==True
测试。如果进行内联操作,则使用筛选器的列表理解在没有筛选器/列表调用的情况下可能会更便宜:如果进行验证,则随机列表中i的
[datetime.datetime.strtime(i,'%Y-%m-%d')(i) ]
没有必要进行
==True
测试。如果没有筛选器/列表调用,则通过内联方式表达对筛选器的列表理解可能更便宜,如果是这样的话:
[datetime.datetime.strtime(i),%Y-%m-%d')对于随机列表中的i,如果验证(i)]