2017-01-19 7 views
-2

Первая строка моего входного файла выглядит следующим образом:Как разбить первую строку входного файла и сохранить их как словарь в python?

<doc id="12" url="http://en.wikipedia.org/wiki?curid=12" title="Anarchism"> 

Я хочу, чтобы хранить их как ключ-значение пары, как это в Python:

{doc_id: 12, url: http://en.wikipedia.org/wiki?curid=12, title: Anarchism} 

Вот мой код:

infile=open('wiki_00').readline().rstrip() 
infile.split()[1:] 

вывод выглядит следующим образом:

['id="12"', 
'url="http://en.wikipedia.org/wiki?curid=12"', 
'title="Anarchism">'] 

Но я хотел бы, «», <> удалены и идентификатор будет сохранен как тип междунар

+0

Почему имя тега привязано только к 'id' и никакому другому атрибуту? – TigerhawkT3

+0

Вы всегда хотите префикс атрибута 'id' с именем тега? – pushkin

+0

@pushkin ok не необходимо. он может выглядеть следующим образом: 12 – Technologic27

ответ

0

Не делайте line[1:] для стирают скобки. Используйте метод strip: line.strip(' <>') удалит все пробелы и <> символы с концов строки.

Что-то вроде этого будет делать то, что я думаю, вы хотите. Возможно, вам захочется добавить обработку ошибок.

def turn_line_into_dict(line): 
    # remove the brackets and tag name 
    line = line.strip(' <>') 
    first_space_idx = line.find(' ') 
    line_without_tag = line[first_space_idx+1:] 

    attr_list = line_without_tag.split(' ') 

    d = {} 
    for attr_str in attr_list : 
     key,value = attr_str.split('=', 1) # only search for first occurrence, so an '=' in the url doesn't screw this up 
     d[key] = value.strip('"\'') # remove quotes and let the dict figure out the type 

    return d 
+0

'line.strip ('<>')' удаляет пробел, '<', and '>' символов с концов строки. Он не удаляет все пробелы и не удаляет эти символы, если они находятся между другими символами. – TigerhawkT3

+0

@ TigerhawkT3 Я решил не беспокоиться о деталях. Я представил общую идею. OP может улучшить его. Однако зачем мне беспокоиться о '>' и '<' в строке? Во-вторых, единственная проблема, которую я могу себе представить, не удаляя все пробелы, - это то, что имени тега могут предшествовать пробелы, поэтому 'line_without_tag' может быть неправильным, но опять же OP может справиться с этим, если это проблема. – pushkin

+0

Речь не идет о том, чтобы беспокоиться о том, что в линии, это то, что вы представили два неверных факта. – TigerhawkT3