我有一堆python代码设置,可以根据某些搜索条件从证书列表中检索subjectDN。每个证书的所有信息都是逐行完成的。格式如下:
C =“ISO代码”,ST =“省”,L =“地区”,O =“组织名称”,OU =“组织单位”,CN =“证书名称”
我的一个文件的例子是:
C = US,ST = California,L = Oakland,O = Acme Ltd.,OU = Web Services,CN = www.acme.com
C = US,ST = California,L = Oakland,O = Acme Ltd.,OU = Web Services,CN = portal.acme.com
C = US,ST = California,L = Oakland,O = Acme Ltd.,OU = Web Services,CN = sardine.acme.com
我想将其转换为一个工作的CSV文件,通常看起来很简单,但其中一些行包含其他数据:
businessCategory =私人组织,juridictionCountry = US,C = US,ST = California,L = Oakland,O = Acme Ltd.,OU =网络服务,CN = www.acme.com
此附加数据会抛出所有列。
我想用这些数据做两件事。
我尝试过使用CSV模块,但我只能将此数据格式化为与现在完全相同。我也尝试在python中使用re模块重写一些行,但我对re的表达式非常困惑。
我的想法是读取输出文件中的每一行,然后为每一行包含一个for循环,以找出我需要的字段并重写它们。类似的东西:
def rewrite()
common_name = #here is where I would do a re command
if #CN= x, is found (where x is the data I want):
ofile.write("www.acme.com")
organization = #here is where I would do a re command
if #O= x, is found (where x is the data I want):
ofile.write("Acme Ltd.")
--snip--
ofile.write("\n")
基本上我会将输入文件中每一行的此函数运行到输出文件。类似的东西:
with open(...) as f:
for line in f:
rewrite()
这是一个很好的方法吗?还是有更简单的方法?有人可以帮我用正则表达式来做这件事吗?
答案 0 :(得分:0)
好吧,如果您可以确定条目的顺序,您可以使用正则表达式提取数据,然后从中形成一个pandas数据帧:
import re, pandas as pd
string = """
C=US, ST=California, L=Oakland, O=Acme Ltd., OU=Web Services, CN=www.acme.com
C=US, ST=California, L=Oakland, O=Acme Ltd., OU=Web Services, CN=portal.acme.com
C=US, ST=California, L=Oakland, O=Acme Ltd., OU=Web Services, CN=sardine.acme.com
businessCategory=Private Organization, juridictionCountry=US, C=US, ST=California, L=Oakland, O=Acme Ltd., OU=Web Services, CN=www.acme.com
"""
rx = re.compile(r'[A-Z]{1,2}=([^\n\r,]+)')
data = [(rx.findall(line)) for line in string.split("\n") if line]
df = pd.DataFrame.from_records(data, columns = ['CountryName', 'StateOrProvinceName', 'Locality', 'Organization', 'OrganizationalUnit', 'CommonName'])
print(df)
......会产生:
CountryName StateOrProvinceName Locality Organization OrganizationalUnit \
0 US California Oakland Acme Ltd. Web Services
1 US California Oakland Acme Ltd. Web Services
2 US California Oakland Acme Ltd. Web Services
3 US California Oakland Acme Ltd. Web Services
CommonName
0 www.acme.com
1 portal.acme.com
2 sardine.acme.com
3 www.acme.com