目的

把一个含有大量邮件地址的txt文件分类

实现

要求:
按照所属同类邮箱的邮件地址分别放入到同一文件里 .../邮箱/邮箱.txt
比如:davis.dai@163.com 放入到.../163/163.txt
全部由程序完成。

代码

##案例1,原文件:d:\mail\mail.txt, 里面每行就个邮件地址
import os  # 导包

# 要处理的原文件所在文件夹路径
path = ("d:\\mail")
# 要处理的原文件所在路径
oPath = os.path.join(path, "mail.txt")
# 打开原文件
f = open(oPath, "r", encoding="utf-8")
# 循环处理
while True:
    # 读取要处理的原文件文件一行
    fStrOneLine = f.readline()
    # 根据邮件地址找到它属于那种邮箱(取出从@后面到点的字符串,比如:davis.dai@163.com,就取163)
    fStrDir = fStrOneLine.split("@")[-1].split(".")[0]
    # 根据取出的字符,设置将要以此字符新建的文件夹路径
    sPath = os.path.join(path, fStrDir)
    # 根据取出的字符,设置将要以此字符新建的文件路径
    fPath = os.path.join(path, fStrDir, fStrDir + ".txt")
    # 判断文件夹是否是否存在
  I  f not os.path.exists(sPath):
        # 如果不存在新建此文件夹
        os.mkdir(sPath)
        # 并且新建文件并关闭文件
        open(fPath, "w")
        open(fPath, "w").close()
    # 打开这个文件
    with open(fPath) as fw:
        # 判断新文件里是否有从原文件读取到的邮件地址
        if fStrOneLine in fw:
            # 如果存在,关闭文件并跳过
            fw.close()
            pass
        # 否则
        else:
            # 打开新文件
            with open(fPath, "a") as fwq:
                # 在新文件里追加写入从原文件读取到的邮件地址并关闭文件
                fwq.write(fStrOneLine)
                fwq.close()
    # 如果源文件的逐行读取到末尾,跳出循环
    if not fStrOneLine:
        break
# 关闭原文件
f.close()
##案例2,原文件:d:\mail.txt, 里面每行3个邮件地址,邮件地址之间有空格
  import os

#整理成每行只有一个邮件地址
f = open(r"d:\mailadd.txt", "r")

while True:
    sline = f.readline().split()
    print(sline)
    fnew = open("d:\\mailnew.txt", "r")
    if not sline:
        break
    i = 0
    for i in range(3):
        sp = sline[i]
        if sp in fnew:
            pass
        else:
            fnew2 = open("d:\\mailnew.txt", "a")
            fnew2.write(sp + '\n')
        i += 1
        fnew2.close()
    fnew.close()
f.close()

#整理归类
fn = open("d:\\mailnew.txt", "r")
while True:
    fnf = fn.readline()
    newDir = ("d:\\mailDir")
    fileTxt = fnf.split("@")[-1].split(".")[0]
    filed = os.path.join(newDir, fileTxt + ".txt")
    if not os.path.isdir(newDir):
        os.mkdir(newDir)
    if not os.path.isfile(filed):
        open(filed, "w")
        open(filed, "w").close()
    with open(filed) as fw:
        if fnf in fw:
            pass
            fw.close()
        else:
            open(filed, "a").write(fnf)
            open(filed, "a").close()
    if not fnf:
        break

fn.close()