Python,CSV和&如果声明

时间:2013-10-22 22:15:52

标签: python csv if-statement

我正在尝试在python中编写一个if语句,它将使用以下代码写入csv文件。我希望if语句写入CSV文件中的单元格。我希望它说“X大于Y”或“Y大于X”。

from bs4 import BeautifulSoup
import csv
x = int(raw_input())
y = int(raw_input())

f = csv.writer(open("pe_ratio.csv", "w"))
f.writerow(["Company Name","PE"])
f.writerow('[x+y, 
    if x > y:    
        print "X is bigger than y"
    if x < y:
        print "Y is bigger than x"
        ]')

尝试更正时,我收到以下错误:

"pe_ratio.py", line 8
f.writerow('[x+y,
SyntaxError: EOL while scanning string literal

此代码解决了问题:

from bs4 import BeautifulSoup
import csv
x = int(raw_input())
y = int(raw_input())

f = csv.writer(open("pe_ratio.csv", "w"))

if x > y:    
        f.writerow(["X is bigger than y"])
elif x < y:
        f.writerow(["Y is bigger than X"])

2 个答案:

答案 0 :(得分:2)

是什么让你认为你可以做到这一点?你将无法在带引号的字符串中引用局部变量x和y。你想要成就什么?

如果只是打印“X大于y”或“Y大于x”而不是这样做:

if x > y:    
        f.writerow(["X is bigger than y"]
elseif x < y:
        f.writerow(["Y is bigger than X"]

答案 1 :(得分:2)

您无法在字符串中间评估代码。但你不需要;您可以评估是字符串的代码。

在您的情况下,您正在尝试评估if语句,该语句不具有值。您可以通过使用三元if表达式来解决此问题:

f.writerow([x+y, 
            "X is bigger than Y" if x > y else "Y is bigger than x"])

但请注意,这不能正确处理x == y的情况;要做到这一点,你需要将一个if-else表达式嵌套在另一个表达式中,这甚至比现在更加丑陋。

更好的解决方案是使用if语句来驱动writerow而不是相反:

if x > y:
    f.writerow([x+y, "X is bigger than y"])
elif x < y:
    f.writerow([x+y, "Y is bigger than x"])