2013-10-22 166 views
-2

我想寫一個if語句在python中,將使用下面的代碼寫入到csv文件。我想要if語句寫入CSV文件中的單元格。我想讓它說「X大於Y」或「Y大於X」。Python,CSV和如果語句

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"]) 
+1

究竟什麼是你想用的代碼呢?你是否期望引號內的代碼以某種方式被執行? –

+0

你需要澄清你的意圖。給我們你想在你的csv中看到的輸出。 – jramirez

+0

作爲一個方面說明,在寫模式下打開一個文件,然後永遠不要調用'close'是一個很好的方法,可以運行到這個網站上最常見的重複問題之一(「在我寫入我的文件後Python怎麼樣?沒有看到任何東西?「)。 – abarnert

回答

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"] 
+0

我想如果你把這個'f.writerow([x + y,...'(並且修復你的大小寫以匹配他的怪異混合)),這將正是他想要的。 – abarnert

+0

so f.writerow([x + Y, 如果X> Y: f.writerow([ 「x比y大」]) elif的X

+0

你忘了嗎?圓括號 – jwodder

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"])