簡體   English   中英

在從Python列表中提取數據的打印語句中運行循環的最佳方法是什么?

[英]What would be the best way to run a loop within a print statement that is extracting data from a list in Python?

我正在嘗試從csv文件中提取數據,這是數據列之一的簡化​​版本

import csv

with open('Movie2.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)
    counter = 0
    for line in csv_reader:
        counter +=1
        print('Movie m%d' % counter, "= new Movie();", '\n',
                 'm'+str(counter)+'.Genres.Add(db.Genres.FirstOrDefault(x => x.GenreName == "' % line[2]+'"));', '\n')

“ line [2]”通常是多種類型,可能看起來像“恐怖,驚悚,戲劇”。 我的目標是針對此特定代碼,最終結果應如下所示:

Movie m1 = new Movie();
m1.Genres.Add (db.Genres.FirstOrDefault(x => x.GenreName == "Horror"));
m1.Genres.Add (db.Genres.FirstOrDefault(x => x.GenreName == "Thriller"));
m1.Genres.Add (db.Genres.FirstOrDefault(x => x.GenreName == "Drama"));

您可以在一個循環中多次調用print ,而不是相反。

for counter, line in enumerate(csv_reader, start=1):
    var = 'm%d' % (counter,)
    genres = line[2].split(", ")
    print('Movie %s = new Movie()' % (var,))
    for genre in genres:
        print('%s.Genres.Add (db.Genres.FirstOrDefault(x => x.GenreName == "%s"))' % (var, genre))

可以說用\\n'連接行列表並調用一次print的另一種選擇可能是不太可讀的:

for counter, line in enumerate(csv_reader, start=1):
    var = 'm%d' % (counter,)
    genres = line[2].split(", ")
    code_lines = ['Movie %s = new Movie();' % (var,)]
    code_lines.extend('%s.Genres.Add (db.Genres.FirstOrDefault(x => x.GenreName == "%s"))' % (var, genre) for genre in genres)
    print("\n".join(code_lines))

盡管不算太多,我還是會一推再推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM