20190127-將一個文件拆分為多個新文件
阿新 • • 發佈:2019-01-28
class 獲取 mce size 拆分 encoding with open == 個數
1.一個文件拆分成5個文件
思路:
1. 首先拆分成多個新文件,新的文件名需要定義,使用file_name_no來定義新文件的名字
2. 新文件的內容要使用file_content來存儲,當寫入新文件後使用file_contect=‘‘清空新文件內容
3. 什麽時候寫新文件:考慮根據原始文件的內容做拆解,如將某文件拆分為5個文件,則原文件的行數除以5達到將原原件中的內容盡量平均的寫入5個新文件中基於該情況,需要一個變量來統計原文件的行數,使用file_length存儲原來文件的行數。然後再重新開始一行一行的讀,當讀取的行數達到1/5,2/5,3/5,4/5...的時候寫文件
def split_file(file_dir,file_name,num):
import os
import os.path
file_name_no=1
file_content=‘‘
#print(type(os.path.splitext(file_name)))
with open(file_dir+file_name,‘r‘,encoding=‘utf-8‘) as fp1:
file_length=len(fp1.readlines())
#fp1.readlines()後,遊標移到文件末尾,因此使用fp1.seek(0,0)將遊標移到文件開始的位置
print(file_length)
fp1.seek(0,0)
#使用fp1.seek(0,0)將遊標移到文件開始的位置
file_line=0
#使用file_line記錄已經讀取的行數
for line in fp1:
file_content+=line
file_line+=1
if file_line==int(file_length/num)*file_name_no and file_name_no<num:
#當讀取的行數為達到文件內容的1/num,2/num...的時候,將文件內容寫入新文件中,此寫法如果文件行數/拆分個數為整數的時候剛好,否自會導致最後一個文件少內容
with open(file_dir+‘new‘+os.path.splitext(file_name)[0]+str(file_name_no)+‘.txt‘,‘w‘,encoding=‘utf-8‘) as fp2:
file_name_no+=1
fp2.write(file_content)
file_content=‘‘
if file_content:
#解決因文件行數不一定拆分文件的整數倍導致最後一個文件可能少內容的情況
with open(file_dir+‘new‘+os.path.splitext(file_name)[0]+str(num)+‘.txt‘,‘a‘,encoding=‘utf-8‘) as fp2:
fp2.write(file_content)
split_file(‘D:\\Python\\‘,‘b.txt‘,3)
Tips:file_dir為文件的路徑,file_name為文件的名稱,使用os.path.splitext(file_name)[0]獲取原來文件名,使用file_dir+‘new‘+os.path.splitext(file_name)[0]+str(file_name_no)+‘.txt‘拼接寫文件名。當一個文件寫入後,file_name_no加1,file_content清空,最後
20190127-將一個文件拆分為多個新文件