2014-11-13 4 views
2

Что я делаю неправильно, когда пытаюсь прочитать их в словаре?Чтение файлов в словаре в Python

Я получаю эту ошибку при попытке чтения значения в словарь:

Traceback (most recent call last): 
    File "<pyshell#27>", line 1, in <module> 
    ListAllFiles() 
    File "C:\Python27\1.py", line 14, in ListAllFiles 
    (key, val) = line.split('=') 
ValueError: need more than 1 value to unpack 

Я использую этот код, чтобы открыть каждый текстовый файл в каталоге и прочитать его содержимое в словарь:

from __future__ import print_function 
import glob 
import os 

# Let's read all the files into the set 
def ListAllFiles(): 
    mydir="C:\\Python27" 
    os.chdir(mydir) 
    for file in glob.glob("*.txt"): 
     #print(mydir+'\\'+file) 
     d = {} 
     with open(mydir+'\\'+file) as f: 
      for line in f: 
       (key, val) = line.split('=') 
       d[file] = (key,val) 
       print (val) 

пример одного из текстовых файлов:

paramA=Y 
paramB=30 
paramC=normal 
paramD=SOME_ITEM_IN_ALL_CAPS 
paramE=5 6 7 8 9 
paramF=/dir/to/stuff 
paramG=y 

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

+-----------+--------+-----------------------+ 
| filename1 | paramA | Y      | 
| filename1 | paramB | 30     | 
| filename1 | paramC | normal    | 
| filename1 | paramD | SOME_ITEM_IN_ALL_CAPS | 
| filename1 | paramE | 5 6 7 8 9    | 
| filename1 | paramF | /dir/to/stuff   | 
| filename1 | paramG | y      | 
| Filename2 | paramA | A      | 
| Filename2 | paramB | 22     | 
| Filename2 | paramC | st     | 
| Filename2 | paramD | AAAA     | 
| Filename2 | paramE | 5 6 7 8 9    | 
| Filename2 | paramF | ff     | 
| Filename2 | paramG | g      | 
| Filename3 | etc | etc     | 
+-----------+--------+-----------------------+ 

Я предположил бы, что словарь будет что-то вроде этого:

d={filename1:(ParamA='A', ParamB='22', Paramc='st'....),filename2:(paramA=... 

Что я делаю не так, когда я пытаюсь читать их в словарь?

+2

Вы столкнулись с линией, которая не содержит '=' характер, поэтому 'раздвоение («=»)' возвращает только одно значение. –

+1

Можете ли вы напечатать (строка) '? Я подозреваю, что есть заголовок (или какая-то другая строка), у которой нет '' = ''. – CoryKramer

+0

Помимо числа ошибок '=' символов вы снова и снова заменяете значение одного и того же ключа, лучше инициализируйте 'd [file] = {}' перед тем, как вы закончите цикл, а затем внутри цикла сделайте 'd [ file] [key] = val'. –

ответ

2

Скорее всего, у вас есть пустая строка в одном из файлов.

защитить ту часть кода с if line: или try ... except

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