我正在尝试在字典列表中获取一些数据。 数据来自csv文件,所以它都是字符串。 文件中的键都有双qoutes,但由于这些都是字符串,我想删除它们,所以它们在字典中看起来像这样:
{'key':value}
而不是
{'"key"':value}
我尝试使用string = string [1:-1],但这不起作用...
这是我的代码:
csvDelimiter = ","
tsvDelimiter = "\t"
dataOutput = []
dataFile = open("browser-ww-monthly-201305-201405.csv","r")
for line in dataFile:
line = line[:-1] # Removes \n after every line
data = line.split(csvDelimiter)
for i in data:
if type(i) == str: # Doesn't work, I also tried if isinstance(i, str)
# but that didn't work either.
print i
i = i[1:-1]
print i
dataOutput.append({data[0] : data[1]})
dataFile.close()
print "Data output:\n"
print dataOutput
我从print获得的所有打印件都很好,没有双引号,但是当我将数据附加到dataOutput时,引号又回来了!
知道如何让它们永远消失吗?
答案 0 :(得分:4)
剥去它。例如:
data[0].strip('"')
但是,在阅读cvs文件时,最好使用内置的cvs
模块。它会照顾你。
答案 1 :(得分:1)
正如评论中所述,在处理CSV文件时,你真的应该使用Python的内置csv module(链接到Python 2文档,因为它似乎就是你正在使用的)。
另外需要注意的是,当你这样做时:
data = line.split(csvDelimiter)
返回列表中的每个项目,如果它不为空,则为字符串。在循环中进行类型检查是没有意义的(尽管有理由你会使用isinstance
)。我不知道它有什么“不起作用”,尽管你可能使用的是unicode字符串。在Python 2上,您通常可以使用isinstance(..., basestring)
,其中basestring
是str
和unicode
的基类。在Python 3上,只需使用str
,除非您知道自己正在处理bytes
。
答案 2 :(得分:1)
你说:“我只是尝试使用string = string [1:-1],但这不起作用......”。它似乎对我很好:
In [101]: s="'word'"
In [102]: s[1:-1]
Out[102]: 'word'