使用python按日期对大量文件文本排序

使用python按日期对大量文件文本排序,python,sorting,datetime,Python,Sorting,Datetime,我是python新手,我必须按日期对大量文件文本进行排序,其中有许多行如下: CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1 CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1 有人能帮我吗 谢谢大家! 您考虑过使用*nix程序吗?用原始术语来说,它可

我是python新手,我必须按日期对大量文件文本进行排序,其中有许多行如下:

   CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 
   CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1
   CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1
有人能帮我吗


谢谢大家!

您考虑过使用*nix程序吗?用原始术语来说,它可能比大多数Python脚本都要快

使用
-t\
指定列之间用
分隔
char,
-kn
指定字段,其中
n
是字段号,如果要将结果输出到新文件,则
-o outputfile
。 例如:


将在其第5个字段上对
input.txt
进行排序,并将结果输出到
sorted.txt

我想将时间转换为时间戳,然后进行排序。 首先将日期转换为列表

rawData = '''CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 
   CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1
   CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1'''
a = rawData.split('\n')
>>> import dateutil.parser,time
>>> sorted(a,key= lambda line:time.mktime(dateutil.parser.parse(line.split('!')[4]).timetuple()))
['CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 ', '   CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1', '   CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1']

看一看正则表达式模块,我已经使用过它好几次了,它看起来很简单,可以用这个模块做您想要的事情
以下是文档,但请尝试通过谷歌搜索正则表达式python示例,以使其更加清晰,祝您好运。

向我们展示您的代码和您迄今为止尝试过的内容,以便我们可以从中开始。您尝试过什么?您确定日期将紧跟在每行的第四个感叹号之后,并且日期的格式为YYYY-MM-DD吗?您是否也需要按时间排序?您知道文件中每一行的其他格式细节吗?这个文件有多大?它是否能一次全部放入RAM?是的,日期总是在该格式中每行的第四个感叹号之后。档案大约是893Mb@ibia75:在本网站上,对所有有用的答案进行投票,以表达您的感激之情。您可以通过单击答案左上角的向上箭头来完成此操作。此外,单击答案左上角附近的复选标记接受最佳答案。这比在评论中说谢谢要好。
rawData = '''CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 
   CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1
   CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1'''
a = rawData.split('\n')
>>> import dateutil.parser,time
>>> sorted(a,key= lambda line:time.mktime(dateutil.parser.parse(line.split('!')[4]).timetuple()))
['CCC!LL!EEEE!EW050034!2016-04-01T04:39:54.000Z!7!1!1!1 ', '   CCC!LL!EEEE!GH676589!2016-04-01T04:39:54.000Z!7!1!1!1', '   CCC!LL!EEEE!IJ6758004!2016-04-01T04:39:54.000Z!7!1!1!1']