2017-03-14 211 views
-1

我完全知道如何用Python正常的方式閱讀csv文件。我也知道我可以解析列表(例如["a, b, 123"])。兩者都因發電機和產量而工作。csv閱讀舊的方式

我的問題是稍有不同:

  • 輸入是dict{"line": "a, b, 123", "line_count": 555, ..}
  • 輸出應該是相同的dict"csv"屬性延伸,就像
    {"line": "a, b, 123", "line_count": 555, .., "csv": ["a", "b", "c"]}

最簡單的和非常傳統方法將是(僞代碼):

def my_csv_reader(myconfig): 
    my_reader = CsvReader(**myconfig) 
    for line in some_gen_providing_the_list_of_dicts: 
     line["csv"] = csv.reader(line["line"]) (1) 
     yield line 

實際上,我能夠使用通過更換線這種方法標記(1):

line["csv"] = csv.reader([line["line"]], **myconfig) (1) 

但我需要解析500條MIO線,以及創建和初始化CSV對象的每一行可能會產生大量的垃圾,實際上是不必要的。我也不喜歡那個標題行,DictReader等將不再是內置的。如果我只能夠:

  • 創建csv reader對象。
  • 調用一個無聊的老式to_csv(my_line)函數返回該行的csv。

這是Python 3.0的某種可能嗎?

+1

不,傳統方法是將CSV閱讀器從行迭代中移出,如文件對象,而不是爲每行創建單獨的閱讀器。 – TigerhawkT3

回答

0

你的意思是?

def to_csv(s): 
    s = s.split(',') 
    s = [t.strip() for t in s] 
    return s 

def csv_reader(dicts): 
    for d in dicts: 
    d['csv'] = to_csv(d['line']) 
    yield d 
+0

你的解決方案在哪裏支持標題,DictReader,方言等? – Juergen