Python 3.5与2.7之间字符串连接的时间差异很大

时间:2018-04-29 07:53:48

标签: python python-3.x python-2.7 performance append

我有340,000个行文件数据,当我用Python 3.5读取文件的时机很好但是当我用Python 2.7运行它读取速度非常慢时,不知道这里发生了什么,这里是代码:

import codecs as cds

INPUT_DATA_DIR = 'some_tsv_file.tsv'
ENT = "entities"

def train_data_getter(input_dir=INPUT_DATA_DIR):
    file_h = cds.open(input_dir,  encoding='utf-8')
    data = file_h.read()
    file_h.close()
    sentences = data.split("\n\n")
    parsed_data = parser(sentences[0])
    return parsed_data

def parser(raw_data):
    words = [line for line in raw_data.split("\n")]
    temp_l = []
    temp_s = ""
    for word in words:
        token, ent = word.split('\t')
        temp_s += token
        temp_s += " "
        temp_l.append(ent)
    data = [(temp_s), {ENT: temp_l}]
    return data

修改

感谢@PM 2Ring,问题是for循环中的字符串连接,但是对于我来说,Python2.7和3.5之间仍存在巨大差异的原因尚不清楚。

1 个答案:

答案 0 :(得分:1)

你在循环中迭代地追加340,000次是非常低效的,所以就是不要这样做。 无论如何,pandas supports tsv read,它将更高效,并支持chunksize参数快速读取大型csv / tsv文件:

import pandas
train = pd.read_table('some_tsv_file.tsv', delim_whitespace=True, chunksize=100000)
# you probably need encoding='utf-8'. You may also need to tweak the settings for header, skiprows etc. Read the doc.