我有以下代码,这花费了相当多的时间。我想知道是否有更快的方法。
for line in lines:
line=line.rstrip()
temp = line.split(",")
splitcsv.append(temp)
我听说使用map和删除"点"符号可以帮助,但我不确定它们如何适用于这种情况。
完整的功能(如果这能让我更深入地了解我想要实现的目标,如下所示)。
def get_data(filename):
"""returns a nested list from a csv file, including headings"""
with open(filename) as infile:
lines = infile.readlines()
splitcsv = []
for line in lines:
line=line.rstrip()
temp = line.split(",")
splitcsv.append(temp)
return splitcsv
请赐教。
我上面所做的工作,我只是想象有更快的方法做事情。我已经看到了各种网页,建议使用地图函数和删除点符号从python来加速它,但因为我是新的python,我正在努力看看如何让它在这种情况下工作。
您可以使用csv库,该库针对性能进行了优化,并处理边缘情况,例如带逗号或换行符的字段。
import csv
def get_data(filename):
with open(filename) as infile:
reader = csv.reader(infile)
splitcsv = [row for row in reader]
return splitcsv
你正在读取所有行,然后迭代它们,你可以尝试同时读取和处理,而不是之前将所有行读入列表。
def get_data(filename):
"""returns a nested list from a csv file, including headings"""
with open(filename) as infile:
return [line.rstrip().split(",") for line in infile]
如果你能提供:
- 输入数据的估计大小是多少
- 输入数据的时间(使用你的实现)是多少
- 输入数据不应超过的时间界限是什么
您可以避免将整个文件读入内存,这可能会改善问题:
def get_data(filename):
splitcsv = []
with open(filename) as data:
for line in map(str.rstrip, data):
splitcsv.append(line.split(','))
return splitcsv
性能:
在我的机器上,我有一个有一百万行的CSV文件,每一行有四列。这个函数在<1.5s
内将文件加载到列表中