1. 程式人生 > >Python將一個大文件按段落分隔為多個小文件的簡單方法

Python將一個大文件按段落分隔為多個小文件的簡單方法

解決 list 之前 一點 open ews 切片 compile popu

今天幫同學處理一點語料。

語料文件有點大,而且是以連續兩個換行符作為段落標誌,他想把它按段落分隔成多個小文件。即每3個段落組成一個新文件。因為曾經沒有遇到過類似的操作,在網上找了一些類似的方法,看起來都有點復雜。

所以經嘗試。自己寫了一段代碼。完美解決這個問題。
基本思路是,先讀原文件內容,並使用正則表達式。根據\n\n進行切片處理。結果為一個列表,當中每個列表元素都存放一個切片中的內容;然後創建一個寫文件的句柄;接下來遍歷切片列表,並寫入當前切片內容,推斷是否已經寫入了3個段落,假設不是,則繼續讀寫下一個切片,假設已經夠3個。則關閉之前的寫文件句柄,以不同的文件名稱又一次創建一個新的寫文件句柄,循環結束,等待讀寫下一個切片。

# -*- coding:utf8 -*- 
import re;
p=re.compile(‘\n\n‘,re.S);
fileContent=open(‘files/辦公室.txt‘,‘r‘,encoding=‘utf8‘).read();#讀文件內容
paraList=p.split(fileContent) #根據換行符對文本進行切片

fileWriter=open(‘files/0.txt‘,‘a‘,encoding=‘utf8‘);#創建一個寫文件的句柄
for paraIndex in range(len(paraList)):#遍歷切片後的文本列表
    fileWriter.write
(paraList[paraIndex]);#先將列表中第一個元素寫入文件裏 if((paraIndex+1)%3==0):#推斷是否寫夠3個切片,假設已經夠了 fileWriter.close(); #關閉當前句柄 fileWriter=open(‘files/‘+str((paraIndex+1)/3)+‘.txt‘,‘a‘,encoding=‘utf8‘); #又一次創建一個新的句柄。等待寫入下一個切片元素。

註意這裏文件名稱的處理技巧。

fileWriter.close();#關閉最後創建的那個寫文件句柄 print(‘finished‘);

$(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); });

    Python將一個大文件按段落分隔為多個小文件的簡單方法