2016-10-27 44 views
0
import urllib 
import csv 

@manager.command 
def list_routes(): 
    for rule in app.url_map.iter_rules(): 
     options = {} 

    for arg in rule.arguments: 
     options[arg] = "[{0}]".format(arg) 

    url = rule.rule 
    line = urllib.parse.unquote("{}{} ".format(rule.endpoint, url)) 

    with open('urls.cvs', 'a') as out: 
     spamwriter = csv.writer(out, lineterminator='', dialect='excel') 
     spamwriter.writerows(line) 
     spamwriter.writerows('\n') 

我需要填寫csv文件,以便rule.endpoint和url具有單獨的列。使用Python分割CSV文件中的列的值

+0

你有不正確的凹痕。 – furas

+1

嘗試'line = urllib.parse.unquote(「{},{}」.format(rule.endpoint,url))''然後''writerow'而不是''編輯器' – roganjosh

回答

0
import csv 
@manager.command 
def list_routes(): 
    with open('urls.csv', 'w') as out: 
     csv_writer = csv.writer(out, lineterminator='\n') 
     csv_writer.writerows([[rule.endpoint, rule.rule] for rule in app.url_map.iter_rules()]) 
3

您的writerows參數只需要是行應包含的值列表的列表。因此,例如writer.writerows([[1, 2], [3, 4]])將添加兩行,其中每行包含兩個值。當您添加只有一行,您可以使用writerow

spamwriter.writerow([rule.endpoint, url]) 

這裏是一個實體模型。我使用BytesIO,這樣我不需要實際寫入文件:

import csv 
import io 
c = io.BytesIO() 
w = csv.writer(c, lineterminator="", dialect="excel") 
w.writerow(['endpoint', 'url']) 
print(c.getvalue()) # prints: endpoint,url 
+0

不起作用。結果寫在一列 – Mark

+0

你能更具體地說明你得到了什麼,你期望什麼?我測試了它,它似乎適用於我。 – xZise