環境:win10+python3.6
目的:用pandas讀取txt大文件(3百萬行)並按某個字段值分成不同的文件txt
#慣例先引入模塊
import pandas as pd
#導入數據,open和pd的read_csv那個更效率呢?
#文件在代碼文件當前文件夾下,可以不寫路徑
#用gbk編碼讀取文本
#該txt文件沒有標題header=None,如果第一行是標題,這樣設置 header=0
#delimiter = '\t'這是分行號。文件中的分隔符是"|",但沒能正確識別出來。
df = pd.read_csv("freelist.txt",encoding="gbk",header=None,delimiter="\t")
print(df.head())
得到的df是有3百萬行和一列的數據,如下表:
0
0 20170405|20170405|A01店|10|1143163301|深圳市...
1 20170405|20170405|b01店|10|1143163301|深圳市...
然後給df分列:分割符是 |
df1 = df[0].str.split('|',expand=True)
假設是按店名稱分拆txt:
#構建一個列表,臨時裝載要拆分的店面,下面是怎麼把店面都找出來。
q = []
#s是店鋪數據集,有大量重複的數字,準備去重
s = df1[3].values
#數據去重
for a in s:
if a not in q:
q.append(a)
#然後呢,根據店面情況拆分txt,並把篩選過後的txt保存到shu/的地方
for b in q:
df1[df1[5]==b].to_csv("shu/"+b+".txt",index=None)
#大功告成,最後可以做個日誌文件:
import datetime
#取當前時間
t = datetime.datetime.now()
name = "%04d"%(t.year)+"%02d"%(t.month)+"%02d"%(t.day)
log = open('log'+ name +'.txt','a')
log.write('\n'+ t.strftime("%Y-%m-%d %H:%M:%S") + ' :開始日誌')