在Python 2中使用字符串和插入变量打印随机csv单元格

时间:2015-06-24 06:54:09

标签: python python-2.7 csv

我是一个蟒蛇菜鸟,所以请放轻松我。

我有一个示例csv文件(实际的csv文件有20行和2列,类似于下面显示的内容):

"I hate %s" % x, "I am a %s" % x
"I heart %s" % x, "I am not a %s" % x

我的python 2.7脚本:

from csv import *

x = "gorillas"

with open('csv_test.csv', 'rU') as csvfile:
    spamreader = reader(csvfile, quoting = QUOTE_MINIMAL)
    list = []
    for row in spamreader:
        list.append(row[0])

    print list[1]   

csvfile.close()

我希望我的脚本能够打印出来:

I heart gorillas

而不是打印:

"I heart %s" % x

所以,我的变量x没有被插入到我的字符串中。我假设我的问题是当我从csv中提取单元格的内容时,整个单元格内容被认为是一个字符串。但是,我不知道如何解决这个问题。

作为奖励或跟进,我还想从我的csv文件中选择一个随机单元格。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你可以使用eval来做到这一点:

from csv import *

x = "gorillas"

with open('csv_test.csv', 'rU') as csvfile:
    spamreader = reader(csvfile, quoting = QUOTE_MINIMAL)
    list = []
    for row in spamreader:
        list.append(eval(row[0]))

    print list[1]   

csvfile.close()

答案 1 :(得分:1)

一个选项可以是将csv文件解释为字符串格式代码行。 这将要求您将字符串解释为脚本的一部分。 您可以使用 eval()

执行此操作
print eval(list[1])

应该这样做。

根据您的应用程序,eval可能很有用,但通常我建议从某处读取输入,然后使用eval运行内容。 考虑用户在网站上发布文本的思想实验。 如果帖子包含有效的python代码,他们就可以在您的机器上运行自己的脚本。

相反,您可以替换部分字符串。 然后松开'%x'格式说明符

from csv import *

x = "gorillas"

with open('csv_test.csv', 'rU') as csvfile:
    spamreader = reader(csvfile, quoting = QUOTE_MINIMAL)
    list = []
    for row in spamreader:
        list.append(row[0])

    print list[1].replace("%s", x)   

csvfile.close()

答案 2 :(得分:0)

我在运行代码时遇到了两个问题 -

  1. 您没有在QUOTE_NONE中设置reader的引用,导致csv阅读器不能替换双引号(至少它不在我的机器中),使用QUOTE_MINIMAL(在我的机器中,python 3.4和python 2.7)它替换了完整的双引号,在list中没有双引号。

  2. 打印字符串时,您必须使用eval()函数评估表达式并打印它。

  3. 代码看起来像 -

    >>> with open('csv_test.csv', 'rU') as csvfile:
    ...     spamreader = reader(csvfile, quoting = QUOTE_NONE)
    ...     list = []
    ...     for row in spamreader:
    ...         list.append(row[0])
    ... 
    >>> print(eval(list[1]))
    I heart gorillas
    

    我只是使用|,因为在你的csv示例中没有出现,你可以使用任何东西。

    请注意,将这些语句保存在csv中然后使用eval在函数中对它们进行评估是不好的做法,因为它们可以在csv中写入任何内容,并且可能会导致程序出现潜在问题。