python中提取特定字段的字符串操作

python中提取特定字段的字符串操作,python,arrays,string,scripting,Python,Arrays,String,Scripting,我在一个文件中有一些数据和一些用户详细信息,示例行如下 <User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName=

我在一个文件中有一些数据和一些用户详细信息,示例行如下

<User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName="GG" lowerLastName="gg" displayName="Vik GG" lowerDisplayName="vikgg" emailAddress="vikgg@vik.com" lowerEmailAddress="vikgg@vik.com">
这给了我一个名为user_array的数组,它将每个用户的详细信息作为一个数组

print user_array[0]
返回

['<User id="123', 'directoryId="122', 'userName="vik_username', 'lowerUserName="vik_username', 'active="1', 'createdDate="2013-12-01 08:25:34.451', 'updatedDate="2014-01-20 19:45:49.133', 'firstName="Vik', 'lowerFirstName="vik', 'lastName="GG', 'lowerLastName="gg', 'displayName="Vik GG', 'lowerDisplayName="vikgg', 'emailAddress="vikgg@vik.com', 'lowerEmailAddress="vikgg@vik.com">\n']
['\n']
现在去拿我想要的田地 1.用户名--username=“vik\u用户名” 2.电子邮件地址--电子邮件地址=”vikgg@vik.com" 3.显示名称--displayName=“Vik GG” 4.活动状态——活动=“1”

我必须做一些类似的事情
打印(用户数组[0][])
然后再次拆分以删除字段标记 例如
userName=“vik\u userName
我将需要删除
userName=“

有人能帮我用python更有效地完成这项工作吗?
提前谢谢

您可以使用正则表达式:

import re

string = r'<User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName="GG" lowerLastName="gg" displayName="Vik GG" lowerDisplayName="vikgg" emailAddress="vikgg@vik.com" lowerEmailAddress="vikgg@vik.com">'
re.findall(r'\"(.*?)\"', string)

>>> ['123', '122', 'vik_username', 'vik_username', '1', '2013-12-01 08:25:34.451', '2014-01-20 19:45:49.133', 'Vik', 'vik', 'GG', 'gg', 'Vik GG', 'vikgg', 'vikgg@vik.com', 'vikgg@vik.com']

因此,如果这些微秒对您很重要,我建议您切分而不是使用正则表达式。

您可以使用正则表达式:

import re

string = r'<User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName="GG" lowerLastName="gg" displayName="Vik GG" lowerDisplayName="vikgg" emailAddress="vikgg@vik.com" lowerEmailAddress="vikgg@vik.com">'
re.findall(r'\"(.*?)\"', string)

>>> ['123', '122', 'vik_username', 'vik_username', '1', '2013-12-01 08:25:34.451', '2014-01-20 19:45:49.133', 'Vik', 'vik', 'GG', 'gg', 'Vik GG', 'vikgg', 'vikgg@vik.com', 'vikgg@vik.com']
import re
line = """<User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName="GG" lowerLastName="gg" displayName="Vik GG" lowerDisplayName="vikgg" emailAddress="vikgg@vik.com" lowerEmailAddress="vikgg@vik.com">"""

wanted_tags = ("userName", "emailAddress", "displayName", "active")
tag_contents = [re.search(fr'{tag}="(.*?)"', line).group(1) for tag in wanted_tags]
# ['vik_username', 'vikgg@vik.com', 'Vik GG', '1']
因此,如果这些微秒对您很重要,我建议您切分而不是使用正则表达式。

import re
import re
line = """<User id="123" directoryId="122" userName="vik_username" lowerUserName="vik_username" active="1" createdDate="2013-12-01 08:25:34.451" updatedDate="2014-01-20 19:45:49.133" firstName="Vik" lowerFirstName="vik" lastName="GG" lowerLastName="gg" displayName="Vik GG" lowerDisplayName="vikgg" emailAddress="vikgg@vik.com" lowerEmailAddress="vikgg@vik.com">"""

wanted_tags = ("userName", "emailAddress", "displayName", "active")
tag_contents = [re.search(fr'{tag}="(.*?)"', line).group(1) for tag in wanted_tags]
# ['vik_username', 'vikgg@vik.com', 'Vik GG', '1']
行=“” 想要的标签=(“用户名”、“电子邮件地址”、“显示名”、“活动”) tag_contents=[re.search(fr'{tag}=“(.*?”),line.group(1)查找想要的_标记中的标记] #['vik_用户名','vikgg@vik.com','Vik GG','1']
我们通过正则表达式匹配给定的标记及其内容。 您可以自定义
想要的\u标签
,结果列表
标签内容
按顺序具有与那些
想要的\u标签
对应的信息。如果需要,您可以使用这两个选项制作词典。

import re
行=“”
想要的标签=(“用户名”、“电子邮件地址”、“显示名”、“活动”)
tag_contents=[re.search(fr'{tag}=“(.*?”),line.group(1)查找想要的_标记中的标记]
#['vik_用户名','vikgg@vik.com','Vik GG','1']
我们通过正则表达式匹配给定的标记及其内容。
您可以自定义
想要的\u标签
,结果列表
标签内容
按顺序具有与那些
想要的\u标签
对应的信息。如果需要,您可以使用这2个元素制作字典。

因为您的数据看起来像XML或其他标记,我建议您使用现成的解析器,例如。如果在输入字符串中添加结束标记(如果它不存在),则可以将其解释为XML:

从lxml导入etree
s=“”
s+=''
myxml=etree.fromstring
d=myxml.attrib
打印(d)#用于进一步处理的词典
打印(d.values())#字典中的值列表
我希望这有帮助

编辑 Python还有一个具有相同功能的内置模块:

将xml.etree.ElementTree作为ET导入
s=“”
s+=''
myxml=ET.fromstring
d=myxml.attrib
印刷品(d)
打印(d.值())

由于您的数据看起来像XML或其他标记,我建议您使用现成的解析器,例如。如果在输入字符串中添加结束标记(如果它不存在),则可以将其解释为XML:

从lxml导入etree
s=“”
s+=''
myxml=etree.fromstring
d=myxml.attrib
打印(d)#用于进一步处理的词典
打印(d.values())#字典中的值列表
我希望这有帮助

编辑 Python还有一个具有相同功能的内置模块:

将xml.etree.ElementTree作为ET导入
s=“”
s+=''
myxml=ET.fromstring
d=myxml.attrib
印刷品(d)
打印(d.值())

感谢您提供关于此功能性能的说明,我的用例是每天只提供2-3次额外数据,因此在我的情况下,性能不会有太大的挑战,但我会记住这些说明。谢谢你的详细解释。谢谢你关于这个性能的注释,我的用例是每天只添加2-3次额外的数据,所以在我的例子中性能不会有太大的挑战,但我会记住这些注释。谢谢你的详细解释。