Что я делаю неправильно, когда пытаюсь прочитать их в словаре?Чтение файлов в словаре в 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=...
Что я делаю не так, когда я пытаюсь читать их в словарь?
Вы столкнулись с линией, которая не содержит '=' характер, поэтому 'раздвоение («=»)' возвращает только одно значение. –
Можете ли вы напечатать (строка) '? Я подозреваю, что есть заголовок (или какая-то другая строка), у которой нет '' = ''. – CoryKramer
Помимо числа ошибок '=' символов вы снова и снова заменяете значение одного и того же ключа, лучше инициализируйте 'd [file] = {}' перед тем, как вы закончите цикл, а затем внутри цикла сделайте 'd [ file] [key] = val'. –