解析两个文件,并为每个id制作一个对应的字符串 - python

我有两个这样的文件:

p.txt

{1=[128, 12, 132], 2=[137, 1, 141, 5, 129, 9], 3=[2, 138, 6, 142]}

s.txt

{1=[200, 11, 987], 2=[765, 198, 31, 912, 234, 11], 3=[19, 12, 38, 60, 212]}

在上述两个文件中,每个客户端ID都有主映射和辅助映射。例如,clientId 1primary映射为128, 12, 132,而secondary映射为200, 11, 987。同样,其他clientId也是如此。上面两个文件的格式应相同,并且两个文件的客户端ID编号应相同。

现在,基于以上两个文件,我需要为每个clientId创建一个这样的字符串,以便对于每个clientId,都存在p和s的值。

{"text":"For id 1.","p":[128, 12, 132],"s":[200, 11, 987]}
{"text":"For id 2.","p":[137, 1, 141, 5, 129, 9],"s":[765, 198, 31, 912, 234, 11]}
{"text":"For id 3.","p":[2, 138, 6, 142],"s":[19, 12, 38, 60, 212]}

做这个的最好方式是什么?在bash中解析p.txts.txt有点困难,因为它们不是有效的json。

参考方案

您可以使用ast.literal_eval将字符串转换为python对象。当然,您需要在输入之前进行一些修改-例如,使用re模块:

from ast import literal_eval
import re

p_str = "{1=[128, 12, 132], 2=[137, 1, 141, 5, 129, 9], 3=[2, 138, 6, 142]}"
s_str = "{1=[200, 11, 987], 2=[765, 198, 31, 912, 234, 11], 3=[19, 12, 38, 60, 212]}"

p_str = re.sub(r'(\d+)\=', r'"x\1":', p_str)
s_str = re.sub(r'(\d+)\=', r'"x\1":', s_str)
p_d = literal_eval(p_str)
s_d = literal_eval(s_str)

for k, v in p_d.items():
    print('{{"text": "For id {}.", "p":{},"s":{}}}'.format(k.lstrip('x'), v, s_d[k]))

这将打印:

{"text": "For id 1.", "p":[128, 12, 132],"s":[200, 11, 987]}
{"text": "For id 2.", "p":[137, 1, 141, 5, 129, 9],"s":[765, 198, 31, 912, 234, 11]}
{"text": "For id 3.", "p":[2, 138, 6, 142],"s":[19, 12, 38, 60, 212]}

要从文件加载,可以使用以下命令:

from ast import literal_eval
import re

with open('p.txt', 'r') as p_in, open('s.txt', 'r') as s_in:
    p_str = p_in.read()
    s_str = s_in.read()

p_str = re.sub(r'(\d+)\=', r'"x\1":', p_str)
s_str = re.sub(r'(\d+)\=', r'"x\1":', s_str)
p_d = literal_eval(p_str)
s_d = literal_eval(s_str)

for k, v in p_d.items():
    print('{{"text": "For id {}.", "p":{},"s":{}}}'.format(k.lstrip('x'), v, s_d[k]))

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …

字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…

将pandas数据框转换为唯一元组列表 - python

将熊猫数据框转换为唯一元组列表的最有效方法是什么?在下面的代码中,我试图提取包含所有唯一PostalCode和Age的元组列表。from typing import NamedTuple, Sequence, Tuple import pandas as pd data = [["tom", 10, "ab 11"],…

将日期从可读字符串转换为更标准的 - python

我的日期格式为Fri 27th Aug,这肯定是您梦imagine以求的编程方式的噩梦。我想知道如何最好地将它们转换为美国日期格式08/27/13。我需要指定月份中的年份,即8月-12月表示13,而1月-7月表示14。我正在考虑查找如何在正则表达式中执行此操作,甚至只是进行一系列字符串替换。但复杂的是,我有一个字符串列表,并非所有字符串都是这种形式的日期。如…