如何将重复的行组合成一个变量,并在每次使用Python后打印第二行

时间:2014-04-03 21:30:32

标签: python dictionary

使用python,我想通读JSON,并查找以相同单词开头的行,并仅显示行中的最后一个单词。然后将这些重复的行存储到一个变量中,所以当我说打印时,这些行只会打印一次而不是它们重复的次数。然后按照这个变量组,打印重复行后2行的部分行。

这很可能没有任何意义。洛尔。

所以,这是我到目前为止的代码:

f = open("myfile.txt")
lines = f.read().splitlines()
for i in range(len(lines)):
    line = lines[i]
    if line.strip().startswith('"ID":'):
        try:
            name_line = lines[i+2]
            print line[21:-2]
        except StopIteration:
            break
        print name_line[15:-2]
        print '\n'

示例文本文件 (我想将以ID字段开头的行分组并打印后面的第二行(名称行))

{
      "theme": land1,
      "ID": "biosphere",
      "Url": "www.land.com",
      "name": "mangrove",
    },
    {
      "theme: water1,<br>
      "ID": "hydrosphere",<br>
      "Url": "www.water.com",<br>
      "name": "Pacific",<br>
    },
    {
      "theme": "air1,
      "ID": "atmosphere",
      "Url": "www.air.com",
      "name": "Oxygen",
    },
    {
     "theme": land2,
      "ID": "biosphere",
      "Url": "www.land.com",
      "name": "oak",<
    },
    {
      "theme: water2,
      "ID": "hydrosphere",
      "Url": "www.water.com",
      "name": "Atlantic",
    },
    {
      "theme": "air2,
      "ID": "atmosphere",
      "Url": "www.air.com",
      "name": "Nitrogen",
    },
}

我的当前输出:

biosphere
mangrove

hydrosphere
Pacific


atmosphere
Oxygen

biosphere
oak

hydrosphere
Atlantic

atmosphere
Nitrogen

我想要的输出:

biosphere
mangrove
oak

hydrosphere
Pacific
Atlantic

atmosphere
Oxygen
Nitrogen

这可能吗?建议?提前谢谢!

3 个答案:

答案 0 :(得分:0)

将其视为JSON文件而非文本文件。

您可以轻松修改JSON文件并根据匹配的密钥获取值并聚合它们。

答案 1 :(得分:0)

将此视为字典列表而不是要解析的文本行。将文件导入为json,然后遍历列表中的每个项目,获取制作自己的字典所需的每个元素。

你可能不得不拿出那些“&lt; br&gt;”你开始之前的陈述。

答案 2 :(得分:0)

如果您不想使用JSON,请执行以下操作:

f = open("myfile.txt")
myDict = {}
for line in f:
    if line.strip().startswith('"ID":'):
        key = line.split('"')[3]
    if line.strip().startswith('"name":'):
        value = line.split('"')[3]
        myDict.setdefault(key,[]).append(value)


for key in myDict:
    print key
    print '\n'.join(myDict[key])
    print