2017-03-14 214 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