Python 3.5正则表达式无法读取文本文件

时间:2016-01-03 17:12:16

标签: python regex validation text-parsing encase

将正则表达式的文本文件转换为文档字符串(与文字字符串相同)是不是一个好主意?我尝试将其转换为str()的字符串并在re中使用多行模式。

我已经创建了一个基本脚本来通过Python解析出EnCase导出文件。它有效,但由于某种原因,我无法获得正则表达式代码来执行findall函数来搜索文件,除非我将文件内容作为文档字符串存储在变量中。

file = '''

'''

似乎这段代码可以重复用于不同的文件,但复制和粘贴每个文件内容变得很麻烦。还有其他建议吗?

EnCase文件导出基本上是制表符分隔的,以下是有关文件格式的信息。

另见:Exporting Files and Folder from EnCase

1 个答案:

答案 0 :(得分:0)

只需阅读该文件即可。这会给你一个字符串:

In [2]: with open('encase_example.md') as cf:
   ...:     data = cf.read()
   ...:     

In [3]: data[:41]
Out[3]: '\n1)\nName\tfile.doc\nFile Category\tDocument\n'

(仅显示部分字符串作为示例。)

请注意,数据中每个记录的字段之间都有换行符,但每个字段的键和值之间都有选项卡。我们稍后会用到它。

这适用于正则表达式:

In [14]: re.findall('Full Path.*', data)
Out[14]: 
['Full Path\tproject\\D\\analysis\\system\\folder\\file.doc',
 'Full Path\tproject\\D\\analysis\\system\\folder\\file2.doc']

如果要分隔记录,只需在\n\n上分开:

In [18]: records = data.split('\n\n')

In [19]: len(records)
Out[19]: 2

In [20]: records[0][:50]
Out[20]: '\n1)\nName\tfile.doc\nFile Category\tDocument\nFile Type'

您还可以将记录制作成字典:

In [35]: dict([ln.split('\t') for ln in records[0].splitlines()][2:])
Out[35]: 
{'Entry Modified': '12/18/14 11:18:53AM',
 'File Acquired': '04/28/15 01:54:45PM',
 'File Category': 'Document',
 'File Created': '03/29/14 03:22:59PM',
 'File Deleted': '',
 'File Type': 'Word Document',
 'Full Path': 'project\\D\\analysis\\system\\folder\\file.doc',
 'Is Deleted': '',
 'Last Written': '08/18/08 01:20:48PM',
 'Name': 'file.doc',
 'Physical Location': '546,930,589,696',
 'Physical Size': '32,768'}