我在文件中有很多行,如下所示:
{"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循环,但我一直反复重复第一行所以我必须错误地插入它。任何帮助表示赞赏。
答案 0 :(得分: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