Python快速字符串解析,操作
问题描述:
我正在使用python来解析传入的逗号分隔字符串。之后我想对数据做一些计算。 字符串的长度是:800个字符,包含120个以逗号分隔的字段。 有120万个字符串需要处理。Python快速字符串解析,操作
for v in item.values():
l.extend(get_fields(v.split(',')))
#process l
get_fields使用operator.itemgetter()以提取约20字段总分120
这整个操作大约需要4-5分钟不计时间在数据带。 在程序的后面部分,我将这些行插入sqlite内存表以供进一步使用。 但是,仅仅解析和获取列表的整体4-5分钟时间并不适合我的项目。
我在6-8线程左右运行这个处理。
切换到C/C++可能有帮助吗?
答
您的程序可能会放慢尝试为1.2M字符串分配足够的内存。换句话说,速度问题可能不是由于字符串解析/操作,而是由于l.extend
。为了测试这个hypothsis,你可以把一个print语句在循环:
for v in item.values():
print('got here')
l.extend(get_fields(v.split(',')))
如果打印报表越来越慢,你或许可以得出结论:l.extend
是罪魁祸首。在这种情况下,如果您可以将每一行的处理移动到循环中,您可能会看到显着的速度提升。 PS:您可能应该使用csv
模块以更高级的方式为您处理解析,但我认为这不会对速度造成太大影响。
答
您是否正在为您的文件记录加载字典?可能更好地直接处理数据:
datafile = file("file_with_1point2million_records.dat")
# uncomment next to skip over a header record
# file.next()
l = sum(get_fields(v.split(',')) for v in file, [])
这避免了在创建任何整体的数据结构,并且仅通过作为get_fields返回积累所需的值。
你正在调用一个需要遍历800个字符的函数,并且你正在做这个函数超过一百万次。即使是电脑,也需要处理很多。 – tlayton 2010-07-02 19:32:26
http://docs.python.org/library/csv.html – kennytm 2010-07-02 19:34:22
如果你打算重新发明*,你应该看看这篇文章:http://*.com/questions/3055477/how-slow- is-pythons-string-concatenation-vs-str-join你也应该看看generator。 – 2010-07-02 19:40:49