我有一个这样的txt文件
DistinguishedName : CN=2,OU=2,OU=2,OU=3,OU=4,OU=5,OU=a,OU=1,OU=8,OU9,DC=a
,DC=f
Enabled : True
GivenName :
LastLogonDate : 2021/7/8 AM 07:41:01
Name : Ken
ObjectClass : user
ObjectGUID : r7h733-13
PasswordLastSet : 2021/7/5 PM 10:25:08
SamAccountName : hs875
SID : t-1-7
Surname : Ken
UserPrincipalName : 456
Whencreated : 2018/1/14 PM 11:13:44
DistinguishedName : CN=1,OU=2,OU=2,OU=3,OU=4,OU=5,OU=6,OU=7,OU=8,OU9,DC=10
,DC=11
Enabled : True
GivenName :
LastLogonDate : 2021/7/8 AM 07:41:01
Name : eddie
ObjectClass : user
ObjectGUID : 67545-abc-98
PasswordLastSet : 2021/7/5 PM 10:25:08
SamAccountName : hs1234
SID : S-1-5-21-3591743293-2469172948-1619552477-59604
Surname : eddie
UserPrincipalName : 123
Whencreated : 2018/1/14 PM 11:13:44
Run Code Online (Sandbox Code Playgroud)
我想通过正则表达式将此文本解析为数据框,列名在 : 之前,值在 : 之后,如下所示:
DistinguishedName Enabled ... Whencreated
CN=2,OU=2,OU=2,OU=3,OU=4,OU=5,OU=a,OU=1,OU=8,OU9,DC=a,DC=f True ... 2018/1/14 PM 11:13:44
CN=1,OU=2,OU=2,OU=3,OU=4,OU=5,OU=6,OU=7,OU=8,OU9,DC=10,DC=11 True ... 2018/1/14 PM 11:13:44
Run Code Online (Sandbox Code Playgroud)
我能怎么做?
您可以使用以下模式:
import re
pattern = re.compile(r'^(\w+)\s*: (.*)$')
Run Code Online (Sandbox Code Playgroud)
粗略地说,这意味着:从行 ( ^)的开头,获取第一个非空单词 ( (\w+)),忽略尾随的空格 ( \s*)、冒号 ( :) 和空格 ( ),并获取所有内容 ( (.*)) 直到行尾线 ( $)
然后,只需打开您的文件并将其解析为字典:
data = {}
with open('file.txt') as f:
for line in f:
match = pattern.match(line)
if not match:
# If this line does not match, add it to the previous added line
data[col][-1] += line.strip()
continue
col = match.group(1)
val = match.group(2)
data.setdefault(col, []).append(val)
Run Code Online (Sandbox Code Playgroud)
的内容data是
{'DistinguishedName': ['CN=2,OU=2,OU=2,OU=3,OU=4,OU=5,OU=a,OU=1,OU=8,OU9,DC=a,DC=f',
'CN=1,OU=2,OU=2,OU=3,OU=4,OU=5,OU=6,OU=7,OU=8,OU9,DC=10,DC=11'],
'Enabled': ['True', 'True'],
'GivenName': ['', ''],
'LastLogonDate': ['2021/7/8 AM 07:41:01', '2021/7/8 AM 07:41:01'],
'Name': ['Ken', 'eddie'],
'ObjectClass': ['user', 'user'],
'ObjectGUID': ['r7h733-13', '67545-abc-98'],
'PasswordLastSet': ['2021/7/5 PM 10:25:08', '2021/7/5 PM 10:25:08'],
'SID': ['t-1-7', 'S-1-5-21-3591743293-2469172948-1619552477-59604'],
'SamAccountName': ['hs875', 'hs1234'],
'Surname': ['Ken', 'eddie'],
'UserPrincipalName': ['456', '123'],
'Whencreated': ['2018/1/14 PM 11:13:44', '2018/1/14 PM 11:13:44']}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法将其转换为 DataFrame
import pandas as pd
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25 次 |
| 最近记录: |