我是一个蟒蛇菜鸟,所以请放轻松我。
我有一个示例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文件中选择一个随机单元格。
感谢您的帮助。
答案 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)
我在运行代码时遇到了两个问题 -
您没有在QUOTE_NONE
中设置reader
的引用,导致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
在函数中对它们进行评估是不好的做法,因为它们可以在csv中写入任何内容,并且可能会导致程序出现潜在问题。