所以我正在从一个文本文件中读取一个字典,但是一旦它将\ 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 :(得分: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')}
答案 1 :(得分:0)
在被"\n"
拆分之前从行中移除","
e.g。
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')}