【发布时间】:2017-03-14 11:14:35
【问题描述】:
我完全了解如何以正常方式使用 Python 读取 csv 文件。我也知道我可以解析列表(例如["a, b, 123"])。由于生成器和产量,两者都可以工作。
我的问题略有不同:
- 输入是
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.x 中是否可行?
【问题讨论】:
-
不,传统的方法是从可迭代的行(如文件对象)中制作 CSV 阅读器,而不是为每一行制作单独的阅读器。
标签: python python-3.x csv