2014-10-03 3 views
1

Моего код:Чтение текстового файла в словарь

fd = open('C:\Python27\\alu.txt', 'r') 
D = dict(line.split("\n") for line in fd) 

Он показывает следующее сообщение об ошибке

traceback (most recent call last): 
    File "C:\Users\ram\Desktop\rest_enz3.py", line 8, in <module> 
    D = dict(line.split("\n") for line in fd) 
ValueError: dictionary update sequence element #69 has length 1; 2 is required 
+0

Как насчет этого? 'D = dict (line.strip(). Split (None, 1) для строки в fd)' – falsetru

+0

Не могли бы вы привести пример файла, подобного тому, который вы пытаетесь прочитать? – Elric

+0

это файл ДНК, такой как ACGTCGCAGCAGACTAGATACGACT – chakri9121

ответ

1

только символ новой строки вы когда-нибудь в line будет один в самом конце, так line.split("\n") вернет список длины 1. Возможно, вы хотели использовать другой разделитель. Если ваш файл выглядит ...

lorem:ipsum 
dolor:sit 

Тогда вы должны сделать

D=dict(line.strip().split(":") for line in fd) 
0

Кевин выше указывает, line.split («\ п») является немного странным, но, возможно, файл это всего лишь список ключей словаря?

Независимо от того, что полученная вами ошибка подразумевает, что line.split ("\ n") возвращает только один элемент (другими словами, в строке отсутствует конечная новая строка). Например:

"Key1\n".split("\n") returns ["Key1", ""] 

в то время как

"Key1".split("\n") returns ["Key1"] 


dict([["key1", ""],["key2", ""]]) 

прекрасно, в то время как

dict([["key1, ""],["key2"]]) 

возвращает ошибку вы цитируете

Это может быть столь же простым, как редактирование файла в вопрос и добавив новую строку в конец файла. Пример

0

Файл: alu.txt

GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA 
TCACGAGGTCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTAA 
AAATACAAAAATTAGCCGGGCGTGGTGGCGGGCGCCTGTAGTCCCAGCTACTCGGGAGGC 
TGAGGCAGGAGAATGGCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCCGAGATCGCGCC 

Чтение файла

with open('C:\\Python27\\alu.txt', 'r') as fp: 
    dna = {'Key %i' % i: j.strip() for i, j in enumerate(fp.readlines())} 

for key, value in dna.iteritems(): 
    print key, ':', value 

Key 1 : GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA 
Key 2 : TCACGAGGTCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTAA 
Key 3 : AAATACAAAAATTAGCCGGGCGTGGTGGCGGGCGCCTGTAGTCCCAGCTACTCGGGAGGC 

Если вы используете Python 3 изменение потока итерация таким образом

for key, value in dna.items(): 
    print(key, ':', value) 
+0

показывает ошибку для ключа, значение в dna.iteritems(): AttributeError: объект 'dict' не имеет атрибута 'iteritems' – chakri9121

+0

Спасибо, фиксированная опечатка. –

+0

он показывает ту же ошибку – chakri9121

Смежные вопросы