如何在Python中从列表中的字符串中删除双引号?

3

我正在尝试在字典列表中获取一些数据。 这些数据来自CSV文件,所以都是字符串。 文件中的键名都带有双引号,但由于它们都是字符串,我想要将其删除,使得它们在字典中看起来像这样:

{'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

我从打印 i 获取的所有内容都很好,没有双引号,但是当我将数据添加到 dataOutput 时,引号又出现了!

有什么想法可以让它们永远消失吗?


2
尝试使用 i = i.replace('"','') - Alagappan Ramu
1
请查看http://stackoverflow.com/questions/14846951/why-cant-i-change-or-reassign-the-values-of-variables-in-lists-using-a-for-loop,了解为什么您不能同时迭代和修改不可变对象。 - Ffisegydd
5
使用csv模块可以帮你省去一些麻烦,它会自动完成这个过程。 - Mark Ransom
3个回答

7
去除它。例如:
data[0].strip('"')

然而,当阅读cvs文件时,最好使用内置的模块。它会为您处理这个问题。

1
您说:“我尝试使用string = string[1:-1],但这并不起作用...”。对我来说似乎很好用:
In [101]: s="'word'"
In [102]: s[1:-1]
Out[102]: 'word'

1

正如评论中所指出的,处理CSV文件时,您真的应该使用Python内置的csv模块(链接到Python 2文档,因为似乎您正在使用它)。

另一个需要注意的事项是,当您执行以下操作时:

data = line.split(csvDelimiter)

返回列表中的每个项目(如果不为空),都将是字符串。在循环中进行类型检查没有意义(尽管如果有原因,您会使用isinstance)。我不知道它的“工作原理”,但可能您正在使用Unicode字符串。在Python 2上,通常可以使用isinstance(...,basestring),其中basestringstrunicode的基类。在Python 3上,除非您知道正在处理bytes,否则只需使用str


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接