CSV to dict,dict not not the item

时间:2014-06-25 13:14:52

标签: python csv dictionary

我正在将CSV转换为dict,所有值都已正确加载但有一个问题。

CSV:

Testing    testing\nwe are into testing mode
My\nServer This is my server.

当我将CSV转换为dict时,如果我尝试使用dict.get()方法,则会返回None

当我调试时,我得到以下输出:

{'Testing': 'testing\\nwe are into testing mode', 'My\\nServer': 'This is my server.'}

我的\ nServer 键有一个额外的反斜杠。

如果我.get("My\nServer"),我的输出结果为None

任何人都可以帮助我吗?

#!/usr/bin/env python

import os
import codecs
import json
from csv import reader

def get_dict(path):
    with codecs.open(path, 'r', 'utf-8') as msgfile:
        data = msgfile.read()
        data = reader([r.encode('utf-8') for r in data.splitlines()])
        newdata = []
        for row in data:
            newrow = []
            for val in row:
                newrow.append(unicode(val, 'utf-8'))
            newdata.append(newrow)
    return dict(newdata)

感谢

2 个答案:

答案 0 :(得分:2)

您需要使用\\n正确转义换行符:

>>> d = {'Testing': 'testing\\nwe are into testing mode', 'My\\nServer': 'This is my server.'}
>>> d.get('My\\nServer')
'This is my server.'

或者您可以使用不需要额外转义的raw string literal

>>> d.get(r'My\nServer')
'This is my server.'

请注意,原始字符串会以这种方式处理所有反斜杠转义序列,而不仅仅是换行符\n

如果您动态获取值,则可以str.encode使用string_escape or unicode_escape encoding

>>> k = 'My\nServer' # API call result
>>> k.encode('string_escape')
'My\\nServer'
>>> d.get(k.encode('string_escape'))
'This is my server.'

答案 1 :(得分:0)

"\n"是换行符。

如果你想在Python中表示像"---\n---"这样的文本,而没有新行,那么你必须逃避它。

你在代码中编写代码的方式以及它的打印方式各不相同,在代码中,你必须编写" \" (除非你使用原始字符串),打印时,不会看到额外的斜线

所以在你的代码中,你应该问:

>>> dct = {'Testing': 'testing\\nwe are into testing mode', 'My\\nServer': 'This is my server.'}
>>> dct.get("My\\nServer")
'This is my server.'