提取程序
先看需要提取的数据,将其切割,先需要做两件事,读取与写入文件,经历循环把每一个数据写入,写入完就关闭文件。
import os
'''
mystr="mishuai4023~|^mishuai4023@163.com~|^a918873cf55f44dd8fc1aafdad42ef78:zjliyr~|^112.238.125.43"
mylist=mystr.split("~|^")
print(mylist)
print(mylist[1])
'''
class GetMail:
def __init__(self,inpath,outpath):#初始化,读写
self.readfile=open(inpath,"r",errors="ignore")
self.writefile=open(outpath,"w")
def getmail(self): #执行,
while True:
line =self.readfile.readline()
if not line:
break
linelist=line.split("~|^")
if len(linelist)==4:
if linelist[1].find("@")!=-1:
self.writefile.write(linelist[1]+"\n")
def __del__(self):#类死亡,关闭文件
self.readfile.close()
self.writefile.close()
path=r"Z:\D\第一阶段视频\20170626\yinchengDay4\机锋2300W完整版"
filelist=os.listdir(path) #listdir遍历一个文件夹下所有文件
print(filelist)
for filename in filelist: #循环文件列表
readpath=path+"\\"+filename
savepath="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\mail\\"
writepath=savepath+filename
#print(readpath,writepath)
mymail=GetMail( readpath, writepath)
mymail.getmail()
如何批量合并
合并的关键是把读取到的数据写入指定地址
'''
import os
savepath="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\mail\\"
mylist=os.listdir(savepath) #遍历目录
print(mylist)
'''
import os
class MergeFile:
def __init__(self,pathdir,outpath):
self.writefile=open(outpath,"w")#写入归并的文件
self.readfilelist=[]
self.filenamelist=os.listdir(pathdir)#获取文件列表
for filename in self.filenamelist:
filepath=pathdir+"\\"+filename #抓取绝对路径
readfile=open(filepath,"r",errors="ignore")#读取文件的对象
self.readfilelist.append(readfile)#加入一个文件对象
def merge(self):
for readfile in self.readfilelist:
while True:
line= readfile.readline()
if not line:
break
self.writefile.write(line)#写入
def __del__(self):
self.writefile.close()#关闭
for readfile in self.readfilelist:
readfile.close()#关闭
'''
savepathdir="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\mail\\"
outpath="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\mail.txt"
mailmerge=MergeFile(savepathdir,outpath)
mailmerge.merge()
savepathdir="Z:\\D\\第一阶段视频\\20170626\\yinchengDay4\\机锋2300W完整版"
outpath="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\jiphone.txt"
mailmerge=MergeFile(savepathdir,outpath)
mailmerge.merge()
'''
savepathdir=r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay5\merge"
outpath="C:\\Users\\Tsinghua-yincheng\\Desktop\\YinchengDay5\\12.txt"
mailmerge=MergeFile(savepathdir,outpath)
mailmerge.merge()
均等切割
均等切割对输入的一个数我们进行切割,如果正好整除就均等切分,有余数就先用这个数减去余数后再除以需要的切割数减一,这样剩下的就是最后一个数
'''
num=eval(input("输入总量"))
N=eval(input("要切割的数量"))
lastlist=[]
if num %N==0: #可以整除
for i in range(N):
lastlist.append(num//N)
else:#不可以整除
if num%(N-1)==0:
for i in range(N-2):
lastlist.append(num//(N-2))
lastlist.append((num%(N-2))//2)
lastlist.append((num % (N - 2))-(num%(N-2))//2)
else:
for i in range(N-1):
lastlist.append(num//(N-1))
lastlist.append(num%(N-1))
print(lastlist)
'''
def evgSplit(sum1, N):
list1 = []
if sum1 % N == 0:
for i in range(N):
list1.append(sum1 // N)
else:
#99 -99%10=90//9=10
evg = (sum1 - sum1 % N) // (N - 1) #10
for i in range(N - 1):
list1.append(evg)
sum1 -= evg
list1.append(sum1)
return list1
#sum1 = eval(input("请输入总数:"))
#N = eval(input("请输入份数:"))
print(evgSplit(100, 10))
print(evgSplit(99, 10))
print(evgSplit(101, 10))
print(evgSplit(91, 10))
数据切割
对于数据而言也是类似不过思维过程需要一步一步来,显示明确输入输出的文件路径,并且需要保存到那一个文件夹中,写入我们的切割方法,计算切割的行数,调用切割方法进行切割,最后再下一个关闭读取与写入,最后主函数写我们需要的参数。
class Cutfile:
#明确输入输出,输入N切割的份数,输入切割文件路径,切割好的文件保存到一个文件夹
def __init__(self,N,readfilepath,outdir):
self.readfile=open(readfilepath,"r",errors="ignore")#打开要切割的文件
self.N=N #切割的份数
self.allnum=self.getlines() #一共多少行,总量
self.cutnumlist=self.evgSplit( self.allnum, self.N)#均等切割
#[10,10,9] #每个文件得到多少
self.writelist=[] #文件列表
for i in range(self.N):
outpath=outdir+"\\"+str(i+1)+".txt" #切割的N个文件设置好路径
file=open( outpath,"w")
self.writelist.append(file)
def evgSplit(self,sum1, N): #切割的方法
list1 = []
if sum1 % N == 0:
for i in range(N):
list1.append(sum1 // N)
else:
# 99 -99%10=90//9=10
evg = (sum1 - sum1 % N) // (N - 1) # 10
for i in range(N - 1):
list1.append(evg)
sum1 -= evg
list1.append(sum1)
return list1
def getlines(self): #一共多少行
length=0 #长度0
while True:
line=self.readfile.readline()
if not line: #读到最后跳出循环,否则行数+1继续读
break
else:
length+=1
self.readfile.seek(0,0)#文件回到开头
return length
def cut(self):
print("开始切割")
#[10, 10, 10, 10, 10, 10, 10, 10, 10, 1]
for i in range(len(self.cutnumlist)):
for j in range(self.cutnumlist[i]):
line=self.readfile.readline()
self.writelist[i].write( line)
#self.writelist[i]写入那个文件
#self.cutnumlist[i]写入多少行
def __del__(self):
self.readfile.close()#关闭读取
for file in self.writelist: #关闭写入
file.close()
readfilepath=r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay5\jiphone.txt"
savedir=r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay5\cutphone"
N=39
mycut=Cutfile(N,readfilepath,savedir)
mycut.cut()