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

我是一个python noob,所以请对我轻松一下。

我有一个示例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文件中选择一个随机单元格。

谢谢您的帮助。


一种选择可能是让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()

你可以使用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()

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

  • 你没有在你的reader设置QUOTE_NONE的引用,导致csv阅读器不能替换双引号(至少它不在我的机器中),QUOTE_MINIMAL(在我的机器上,Python 3.4和Python 2.7)它是替换完整的双引号,并且在list中没有双引号。

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

  • 代码看起来像 -

    >>> 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在函数中对它们进行eval因为它们可以将任何内容写入csv,并且可能会导致程序出现潜在的问题。

    链接地址: http://www.djcxy.com/p/55097.html

    上一篇: Printing a random csv cell with string and inserted variable in Python 2

    下一篇: "big" Data csv search from 2 files