使写入文件进程更有效率

时间:2017-10-11 05:13:51

标签: python-3.6 coding-efficiency

我是编程新手,我正在运行此脚本来清理大型文本文件(超过12000行)并将其写入另一个.txt文件。问题是当一个较小的文件(大约500行)运行它执行得很快,因此我的结论是由于文件的大小需要时间。因此,如果有人可以指导我使这个代码有效,我们将非常感激。

input_file = open('bNEG.txt', 'rt', encoding='utf-8')
    l_p = LanguageProcessing()
    sentences=[]
    for lines in input_file.readlines():
        tokeniz = l_p.tokeniz(lines)
        cleaned_url = l_p.clean_URL(tokeniz)
        remove_words = l_p.remove_non_englishwords(cleaned_url)
        stopwords_removed = l_p.remove_stopwords(remove_words)
        cleaned_sentence=' '.join(str(s) for s in stopwords_removed)+"\n"
        output_file = open('cNEG.txt', 'w', encoding='utf-8')
        sentences.append(cleaned_sentence)
        output_file.writelines(sentences)
    input_file.close()
    output_file.close()

编辑:以下是答案中提到的更正后的代码,其他一些更改都符合我的要求

input_file = open('chromehistory_log.txt', 'rt', encoding='utf-8')
    output_file = open('dNEG.txt', 'w', encoding='utf-8')
    l_p = LanguageProcessing()
    #sentences=[]
    for lines in input_file.readlines():
        #print(lines)
        tokeniz = l_p.tokeniz(lines)
        cleaned_url = l_p.clean_URL(tokeniz)
        remove_words = l_p.remove_non_englishwords(cleaned_url)
        stopwords_removed = l_p.remove_stopwords(remove_words)
        #print(stopwords_removed)
        if stopwords_removed==[]:
            continue
        else:
            cleaned_sentence=' '.join(str(s) for s in stopwords_removed)+"\n"

        #sentences.append(cleaned_sentence)
        output_file.writelines(cleaned_sentence)
    input_file.close()
    output_file.close()

1 个答案:

答案 0 :(得分:0)

将讨论作为答案:

这里有两个问题:

打开/创建输出文件并在循环中写入数据 - 对于输入文件的每一行。另外,你收集数组中的所有数据(句子)。

您有两种可能性:

a)在循环之前创建文件,然后在循环中写入" cleaning_sentence" (并删除收集"句子")。

b)收集"句子中的所有内容"写"句子"在循环之后立刻。

a)的缺点是:这比b)慢一点(只要OS di不必为b替换内存)。但优势在于:无论文件大小多少以及计算机内存的安装量减少,这都会减少内存消耗。