我正在将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)
感谢
答案 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.'