2017-07-30 57 views
1

TLDR:解析来自Python中的文本文件与struct.unpack()的固定字段行?

我想下面这行解析为一个对象:

-rw-rw---- 1 root sdcard_rw 169622962 2017-07-11 17:50 VID_20170711_175051.mp4 

在这里阅读说明书和各岗位,似乎struct.unpack()是要走的路因为目录列表本质上是固定的字段表。

但是,我找不到如何做到这一点的例子,也没有把我的大脑围绕它阅读文档。

这是正确的方法吗?如果是这样,有人可以解释如何正确地构造格式,以便struct.unpack可以解析这个?

背景:

为了复制文件从使用亚行电话,我使用亚行外壳LS的/ mnt/SD卡/ DCIM /摄像机到转储文件的目录列表。我想解析目录列表,以便知道a)需要复制的每个文件的名称,以及b)文件大小,以便我们可以比较复制后的文件大小,以确保文件在被复制之前被实际复制删除了电话。

更多样本数据如下。

total 28G 
drwxrwx--x 593 root sdcard_rw 72K 2017-07-30 12:26 . 
drwxrwx--x 5 root sdcard_rw 4.0K 2017-07-30 12:24 .. 
-rw-rw---- 1 root sdcard_rw 693K 2017-05-20 17:24 Burst_Cover_Collage_20170520172413.jpg 
-rw-rw---- 1 root sdcard_rw 431K 2017-05-20 17:27 Burst_Cover_Collage_20170520172732.jpg 
drwxrwx--x 2 root sdcard_rw 4.0K 2017-01-22 15:08 Burst_Cover_GIF_Action_20170122150851 
-rw-rw---- 1 root sdcard_rw 1.5M 2017-01-22 15:09 Burst_Cover_GIF_Action_20170122150851.gif 
drwxrwx--x 2 root sdcard_rw 4.0K 2017-01-22 15:09 Burst_Cover_GIF_Action_20170122150904 
-rw-rw---- 1 root sdcard_rw 2.3M 2017-01-22 15:09 Burst_Cover_GIF_Action_20170122150904.gif 
drwxrwx--x 2 root sdcard_rw 4.0K 2017-01-22 15:13 Burst_Cover_GIF_Action_20170122151304 
-rw-rw---- 1 root sdcard_rw 1.2M 2017-01-22 15:13 Burst_Cover_GIF_Action_20170122151304.gif 
drwxrwx--x 2 root sdcard_rw 4.0K 2017-01-22 15:14 Burst_Cover_GIF_Action_20170122151424 
-rw-rw---- 1 root sdcard_rw 5.7M 2017-01-22 15:14 Burst_Cover_GIF_Action_20170122151424.gif 
drwxrwx--x 2 root sdcard_rw 4.0K 2017-01-23 16:44 Burst_Cover_GIF_Action_2017
-rw-rw---- 1 root sdcard_rw 1.2M 2017-01-23 16:45 Burst_Cover_GIF_Action_2017.gif 
-rw-rw---- 1 root sdcard_rw 1.1M 2017-03-26 18:18 Burst_Cover_GIF_Action_20170326181830.gif 
-rw-rw---- 1 root sdcard_rw 3.6M 2017-04-24 20:14 Burst_Cover_GIF_Action_20170424201337.gif 
-rw-rw---- 1 root sdcard_rw 5.9M 2017-04-30 19:03 Burst_Cover_GIF_Action_20170430190336.gif 
-rw-rw---- 1 root sdcard_rw 914K 2017-06-03 17:42 Burst_Cover_GIF_Action_20170603174226.gif 
-rw-rw---- 1 root sdcard_rw 2.9M 2017-06-07 09:46 Burst_Cover_GIF_Action_20170607094618.gif 
-rw-rw---- 1 root sdcard_rw 0.9M 2017-07-04 14:35 Burst_Cover_GIF_Action_20170704143514.gif 
-rw-rw---- 1 root sdcard_rw 815K 2017-07-04 15:11 Burst_Cover_GIF_Action_20170704151104.gif 
-rw-rw---- 1 root sdcard_rw 2.4M 2016-03-29 17:21 IMG_20160329_172126.jpg 
-rw-rw---- 1 root sdcard_rw 2.4M 2016-03-29 17:21 IMG_20160329_172130.jpg 
-rw-rw---- 1 root sdcard_rw 2.5M 2016-03-29 17:21 IMG_20160329_172131.jpg 
-rw-rw---- 1 root sdcard_rw 2.4M 2016-03-29 17:21 IMG_20160329_172133.jpg 
-rw-rw---- 1 root sdcard_rw 2.6M 2016-03-29 17:21 IMG_20160329_172133_1.jpg 
-rw-rw---- 1 root sdcard_rw 2.8M 2016-03-29 19:40 IMG_20160329_194042.jpg 
-rw-rw---- 1 root sdcard_rw 2.2M 2016-03-29 19:40 IMG_20160329_194044.jpg 
-rw-rw---- 1 root sdcard_rw 2.3M 2016-03-29 19:40 IMG_20160329_194048.jpg 
-rw-rw---- 1 root sdcard_rw 2.4M 2016-03-29 19:40 IMG_20160329_194052.jpg 
-rw-rw---- 1 root sdcard_rw 2.0M 2016-03-29 19:40 IMG_20160329_194057.jpg 
-rw-rw---- 1 root sdcard_rw 2.1M 2016-03-29 19:41 IMG_20160329_194100.jpg 

回答

0

你试过吗?

re.findall(r"([\d.]{1,3}[A-Z])\b(?:\s\S+){2}\s(?!\.{1,2}$)([\w\.]+)$", textfile, re.M) 
+0

谢谢。我考虑过正则表达式,但是,我想用它作为学习练习来学习struct。然而,我可能会以regex结束,因为字段大小可能会根据每个字段中的值而改变(可能是struct的约束)。 – DrDamnit

+0

@DrDamnit结构是用于二进制数据。这不是二进制数据。 – Bharel