Python读取\ n在行尾

时间:2015-01-03 18:45:39

标签: python python-3.x

所以我正在从一个文本文件中读取一个字典,但是一旦它将\ 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

2 个答案:

答案 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')}