2015-01-03 4 views
0

Итак, я читаю из текстового файла, чтобы сделать словарь, но как только он добавляет \ n к концу строки ... Почему это?Чтение Python n в конце строки

Python

irTable = {} 
with open("devices.txt") as file: 
     for line in file: 
       value = line.split(",") 
       label = str(value[0]) 
       freq = int(value[1]) 
       state = str(value[2]) 

       irTable[label] = freq, state 
       print(irTable) 

Текстовый файл

lamp, 000000, False 
tv, 000000, False 
bedside, 000000, False 
pc, 000000, False 
bed tv, 000000, False 
+0

вы можете использовать 'splitlines()' тоже, как у вас есть 4 строки в файле. – Kasramvd

+0

Эти вызовы 'str' являются избыточными, поскольку элементы' value' являются ** уже ** строками. Также: используйте модуль 'csv' стандартной библиотеки, а не самостоятельно обрабатывать файл с запятыми. –

+0

@ Kasra: это требует, чтобы вы сначала прочитали весь файл в памяти. Если вы хотите обработать файл по строкам, как это делает OP, вы просто разделите новую строку. –

ответ

0

Все ваши строки имеют символ новой строки; вам необходимо сначала удалить его перед обработкой строки:

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')} 
+0

Удивительный, спасибо! – Jam3sn

0

Удалить "\n" от линии до сплита по "," например

irTable = {} 
with open("111.txt") as file: 
    for line in file: 
     value = line.strip().split(",") 
     irTable[value[0].strip()] = int(value[1]), value[2].strip() 
print(irTable) 

Выход:

{'tv': (0, 'False'), 'pc': (0, 'False'), 'lamp': (0, 'False'), 'bedside': (0, 'False'), 'bed tv': (0, 'False')} 
Смежные вопросы