Python 3.5 正则表达式无法读取文本文件
Python 3.5 Regular expressions cannot read text file
将文本文件转换为文档字符串(与文字字符串相同)以使正则表达式起作用是否是个好主意?我试过使用 str()
将其转换为字符串并在 re.
中使用多行模式
我创建了一个基本脚本来通过 Python 解析出 EnCase 导出文件。它有效,但出于某种原因,我无法获得正则表达式代码来执行 findall 函数来搜索文件,除非我将文件的内容作为文档字符串存储在变量中。
file = '''
'''
似乎这段代码可以重复用于不同的文件,但是复制和粘贴每个文件内容变得很麻烦。还有其他建议吗?
EnCase 文件导出本质上是制表符分隔的,下面包含有关文件格式的信息。
刚刚阅读了文件。这会给你一个字符串:
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'}
将文本文件转换为文档字符串(与文字字符串相同)以使正则表达式起作用是否是个好主意?我试过使用 str()
将其转换为字符串并在 re.
我创建了一个基本脚本来通过 Python 解析出 EnCase 导出文件。它有效,但出于某种原因,我无法获得正则表达式代码来执行 findall 函数来搜索文件,除非我将文件的内容作为文档字符串存储在变量中。
file = '''
'''
似乎这段代码可以重复用于不同的文件,但是复制和粘贴每个文件内容变得很麻烦。还有其他建议吗?
EnCase 文件导出本质上是制表符分隔的,下面包含有关文件格式的信息。
刚刚阅读了文件。这会给你一个字符串:
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'}