0

我在文件中有很多如下所示的行:

{"first_name":"John","last_name":"Smith","age":30}
{"first_name":"Tim","last_name":"Johnson","age":34}

我首先尝试使用 json 模块将其作为字典导入,这样我就可以打印键的值。问题是某些行缺少正确的大括号或有其他问题,并且每行的字段顺序不同。那是阻止进口。

所以现在我正在尝试使用正则表达式来做到这一点。我有这个:

fo = open("c:\\newgoodtestsample.txt", "r")
x = fo.read()
match1 = re.search('first_name"(.*?)"(.*?)"', x) 
if match1:
    print match1.group(2)

这仅返回名称的值。我也希望能够返回其他字段。这在正则表达式测试器中工作,但我无法让它在我的代码中工作:

(first_name|last_name|age)"(.*?)"(.*?)"

最后,一旦确定了这一点,我需要读取文件中的每一行(不仅仅是第一行)并将请求的正则表达式数据从每一行打印到一个文件中。我尝试插入一个 for 循环,但我不断重复第一行,所以我必须错误地插入它。任何帮助表示赞赏。

4

1 回答 1

1

以下似乎可以满足您的要求,正则表达式应该将 JSON 中的所有值字段作为匹配组返回给您(尽管不是存储这些值的关键字)。

我还鼓励您使用with上下文管理器,因为它会在读取所有行后自动关闭文件句柄,只需使用 for 循环即可轻松完成。

with open("c:\\newgoodtestsample.txt", "r") as fo:
    for line in fo:
        result = re.findallr'"(\w*?)":"?(\w*)"?', line) 
        d = {k:v for k,v in re.findall(r'"(\w*?)":"?(\w*)"?', line)}
        if 'first_name' in d:
            # print first_name into file
        else:
            # print empty first_name field
于 2013-08-25T19:30:15.747 回答