Огромная разница во времени в конкатенации строк между Python 3.5 против 2.7 - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть 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 голосов
/ 29 апреля 2018

Ваше итеративное добавление 340 000 раз внутри цикла ужасно неэффективно, так что просто не делайте этого. В любом случае, pandas поддерживает чтение tsv , оно будет более производительным и поддерживает аргумент 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...