Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 我有一个长字符串,其中包含多种格式的日期(dd-mm-yyyy、mm-dd-yyyy等)。如何将它们全部转换为相同的格式?_Python_Regex_String_Datetime_Parsing - Fatal编程技术网

Python 我有一个长字符串,其中包含多种格式的日期(dd-mm-yyyy、mm-dd-yyyy等)。如何将它们全部转换为相同的格式?

Python 我有一个长字符串,其中包含多种格式的日期(dd-mm-yyyy、mm-dd-yyyy等)。如何将它们全部转换为相同的格式?,python,regex,string,datetime,parsing,Python,Regex,String,Datetime,Parsing,我正在研究Python。我有很多数据的长文本。每个文本都可以被视为一个字符串。在每个字符串中,我需要将字符串分隔为列表中的元素,其中有日期 eg. long string1 (date format: mm.dd.yyyy): 05.12.2016 15:58:31 jsfkgskdlfsgfdslkcbj 05.13.2016 15:58:31 sdfasjdcakscsdv 01.14.2016fsdkjgfdhkvjxdbvxd eg. long string2 (date for

我正在研究Python。我有很多数据的长文本。每个文本都可以被视为一个字符串。在每个字符串中,我需要将字符串分隔为列表中的元素,其中有日期

eg. long string1 (date format: mm.dd.yyyy): 

05.12.2016 15:58:31 jsfkgskdlfsgfdslkcbj 05.13.2016 15:58:31  sdfasjdcakscsdv
01.14.2016fsdkjgfdhkvjxdbvxd

eg. long string2 (date format: dd/mm/yyyy): 

05/12/2016 15:58:31 jsfkgskdlfsgfdslkcbj 05.1.2016 15:58:31  sdfasjdcakscsdv
21/11/2016fsdkjgfdhkvjxdbvxd
步骤1:我需要编写一个通用代码,以便在同一代码中传递两个字符串

第2步:代码的目标是将字符串转换为包含元素的列表 按日期分开

例如,从长字符串1到列表1 [05.12.2016 15:58:31 JSFGGSKDLFSGDSLKCBJ,05.13.2016 15:58:31 sdfasjdcakscsdv,01.14.2016FSDKJGFHKVGXDBVXD]

第3步:然后获取日期最早的元素

上述示例的输出:01.14.2016fsdkjgfdhkvjxdbvxd

我在执行第2步和第3步时得到了帮助,当所有字符串都具有相同的日期格式时,我就可以这样做了。但我的挑战是首先读取一个字符串,找出它使用的是哪种日期格式,然后根据日期对其进行解析和排序

我有代码,如果一个日期格式是给定的

text = '05/12/2016 15:58:31 jsfkgskdlfsgfdslkcbj 05.1.2016 15:58:31  sdfasjdcakscsdv 21/11/2016fsdkjgfdhkvjxdbvxd'

list1 = list()
for d, t in zip(*[iter(re.split(r'(\d+[\/.]\d+[\/.]\d+ \d+:\d+:\d+)', text)[1:])]*2):
    list1.append(d + t)

from datetime import datetime
list_sorted=sorted(list1,key=lambda s: datetime.strptime(s[0:19], "%d.%m.%Y %H:%M:%S") if '.' in s[0:19] else datetime.strptime(s[0:19], "%d/%m/%Y %H:%M:%S"))

complaint = list_sorted[0]
print(complaint)
上述代码适用于单个日期格式的单个字符串。如何将其概括为首先检测字符串中的日期格式,然后对其进行相应的解析

您可以在模块中使用present,它可以为您解析日期时间字符串,而不考虑其格式

In [17]: from dateutil import parser                                                                                                                                                   

In [18]: parser.parse('05/12/2016 15:58:31', fuzzy=True)                                                                                                                                           
Out[18]: datetime.datetime(2016, 5, 12, 15, 58, 31)

In [19]: parser.parse('05.1.2016 15:58:31', fuzzy=True)                                                                                                                                            
Out[19]: datetime.datetime(2016, 5, 1, 15, 58, 31)

In [20]: parser.parse('21/11/2016', fuzzy=True)                                                                                                                                                    
Out[20]: datetime.datetime(2016, 11, 21, 0, 0)
或者另一个收集datetime对象并根据其对原始列表进行排序的示例

from dateutil import parser

#List of textdate srings
textdate = ['5.13.2001 21:23:54 fgdsgd', '05.12.2001 09:43:32 arfehfks']

#Collect datetime objects
dates = []
for item in textdate:
    dates.append(parser.parse(item, fuzzy=True))

#Sort datetime objects and obtained original list on sorting
res = [textdate[i[0]] for i in sorted(enumerate(dates), key=lambda x:x[1])]
print(res)
输出将是

['05.12.2001 09:43:32 arfehfks', '5.13.2001 21:23:54 fgdsgd']

对于相同的@SakshiJajodia,您可以使用
dateutil.parser
,检查我下面的回答是否有意义