Все ваши строки имеют символ новой строки; вам необходимо сначала удалить его перед обработкой строки:
value = line.rstrip('\n').split(",")
Python не удаляет его для вас. Используемый здесь str.rstrip()
method удалит из конца строки любое число символов \n
; никогда не будет более одного. Вы также можете расширить это до любого пробела на обоих концах строки, используя str.strip()
без аргументов.
Вы уже начали с строк, поэтому здесь нет необходимости использовать вызовы str()
. Если линии разделенных запятыми, вы могли бы просто использовать csv
модуль и иметь он заботиться о линии окончаний:
import csv
irTable = {}
with open("devices.txt", newline='') as file:
for label, freq, state in csv.reader(file, skipinitialspace=True):
irTable[label] = int(freq), state
Демо:
>>> from io import StringIO
>>> import csv
>>> demofile = StringIO('''\
... lamp, 000000, False
... tv, 000000, False
... bedside, 000000, False
... pc, 000000, False
... bed tv, 000000, False
... ''')
>>> irTable = {}
>>> for label, freq, state in csv.reader(demofile, skipinitialspace=True):
... irTable[label] = int(freq), state
...
>>> irTable
{'lamp': (0, 'False'), 'tv': (0, 'False'), 'bedside': (0, 'False'), 'bed tv': (0, 'False'), 'pc': (0, 'False')}
вы можете использовать 'splitlines()' тоже, как у вас есть 4 строки в файле. – Kasramvd
Эти вызовы 'str' являются избыточными, поскольку элементы' value' являются ** уже ** строками. Также: используйте модуль 'csv' стандартной библиотеки, а не самостоятельно обрабатывать файл с запятыми. –
@ Kasra: это требует, чтобы вы сначала прочитали весь файл в памяти. Если вы хотите обработать файл по строкам, как это делает OP, вы просто разделите новую строку. –