我有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之间仍存在巨大差异的原因尚不清楚。
答案 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.