神奇的把一个文件夹变身成网站初稿python程序

"""
把文件夹变身为一个网站的神奇程序,使用utf-8编码


"""
import os
import hashlib
import xlrd
import re


#以下三行为修正,'UCS-2' codec can't encode characters in position 1050-1050错误‘
import sys
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
#用法 print(x.translate(non_bmp_map))   x是一个字符串。


webfolder="F:\web"

websitename="哈里发内部优惠券网站初稿python程序"

扩展名=".php"

websiteurl="http://www.HaLiFa.net"


def 写文件(文件名,内容):
    临文件=open(文件名,'w',encoding='utf-8')
    临文件.write(内容)
    临文件.close()
    
def getFileSomeContent(filename,最多字数):
    """获取文件一些内容,返回内容"""
    文件后缀名=os.path.splitext(filename)[1].lower()
    Filecontents=filename + "是一个" + 文件后缀名 + "文件。\n"
    if 文件后缀名=="txt" or 文件后缀名=="html" or 文件后缀名="htm" or 文件后缀名="php" or 文件后缀名="asp":
        文件内容=""
        with open(filename, 'rb') as atxtfile:
            for eline in atxtfile:
                文件内容=文件内容 + eline
        dr = re.compile(r'<[^>]+>',re.S)    #去除html标签
        Filecontents = dr.sub('',文件内容)


    if 文件后缀名=="xls" or 文件后缀名=="xlsx":
        print("\n准备处理电子表格:\n")
        表内容=[]
        try:
            data = xlrd.open_workbook(filename) # 打开xls文件
            table = data.sheets()[0] # 打开第一张表
            nrows = table.nrows # 获取表的行数
            print(filename + "共有" + str(nrows) + "行数据。\n")            
            行计数器=30            #最多30行
            for i in range(nrows): # 循环逐行
                表内容.add(table.row_values(i)[4])
                行计数器=行计数器+1
                if 行计数器>30:break
            Filecontents="\n".join(表内容)
        except:
            print("打开电子表格文件出错。")
    
    return Filecontents
def 生成每个文件的详情网页(每个数据,写入文件夹):
    """每个数据是带路径的文件夹全称"""
    global webfolder
    global 扩展名
    global websiteurl
    global websitename
    网页正文内容=getFileSomeContent(每个数据,1024)    #本函数拟用一个单独的模块来解决
    文件名0=每个数据.split("\\")[-1]   #原文件名
    文件名=文件名0 + 扩展名            #加扩展名的文件名
    #载入详情模版
    详情模版内容=''
    pattern=open(webfolder + "\\template\详情页模版.asp",'r',encoding='utf-8')
    for eline in pattern:
        详情模版内容=详情模版内容 + eline
    pattern.close()
    网页文件内容=详情模版内容
    网页文件内容=网页文件内容.replace("$$websitename$$",websitename)
    websitetitle=文件名0 + "下载 download,"+网页正文内容[:10]
    网页文件内容=网页文件内容.replace("$$websitetitle$$",websitetitle)
    网页文件内容=网页文件内容.replace("$$websitekeywords$$","下载"+ websitetitle)    
    网页文件内容=网页文件内容.replace("$$websitedescription$$","下载" + websitetitle+"_"+websitename)
    网页文件内容=网页文件内容.replace("$$websiteurl$$",websiteurl)
    网页文件内容=网页文件内容.replace("$$websitecontent$$",网页正文内容)
    文件名=文件名.translate(non_bmp_map)
    print(写入文件夹+"\\" + 文件名)
    写文件(写入文件夹+"\\" + 文件名,网页文件内容)
    


def getHash(filename):
    f1=open(filename,'rb')
    line=f1.readline()  
    hash=hashlib.md5()  
    while(line):  
        hash.update(line)  
        line=f1.readline()  
    return hash.hexdigest()


def 生成分页网页(当前页号,总页数,数据列表,md5列表,网页模版,写入文件夹):
    
    """当前页号,总页数,数据列表,md5列表,网页模版,写入文件夹


    """   
    #根据网页模版待替换字符串,首先确定以下字符串的值
    global 扩展名
    global websitename                    #对应 $$websitename$$
    global websiteurl 
    websitetitle="下载"                    #对应 $$websitetitle$$
    cc=0
    for afile in 数据列表:
        afilename=afile.split("\\")[-1]
        websitetitle=websitetitle + afilename + "_"
        cc=cc+1
        if cc>10:break
    websitetitle=websitetitle + websitename
        

    websitekeywords=websitetitle                   #对应 $$webistekeywords$$
    websitedescription=websitetitle                #对应 $$websitedescription$$   
                                 #$$websiteurl$$
    FirstPage="0" + 扩展名                         # $$FirstPage$$    
    if 当前页号==0:
        LastPage="0" + 扩展名                      #$$LastPage$$"
    else:
        LastPage= str(当前页号-1) + 扩展名

        
    CurrentPage =str(当前页号)                         #当前页 $$CurrentPage$$
    
    if 当前页号==总页数:
        NextPage=str(总页数) + 扩展名              #$$NextPage$$ 下一页
    else:
        NextPage= str(当前页号+1) + 扩展名
    
  
    EndPage=str(总页数-1) + 扩展名                   # $$EndPage$$  末页


    counter=0
    websitecontent="<div>"                              #       $$websitecontent$$
    for 每个数据 in 数据列表:
        数据=每个数据.split("\\")[-1]
        文件的MD5编号前两个字符="".join(md5列表[counter][:2])
        tmpfolder=写入文件夹 + "\\" + 文件的MD5编号前两个字符
        if os.path.exists(tmpfolder)==False:os.mkdir(tmpfolder)
        #把文件详情页写入刚才建立的文件夹         
        生成每个文件的详情网页(每个数据,tmpfolder)
        tmpurl= 文件的MD5编号前两个字符 + "/" + 数据 + 扩展名
        websitecontent =websitecontent  + "<a href='" + tmpurl + "'>" + 数据 + "</a>&nbsp;&nbsp;"
        counter=counter+1
    websitecontent =websitecontent  + "</div><hr>"
        
    网页文件内容=网页模版内容
    网页文件内容=网页文件内容.replace("$$websitename$$",websitename)
    网页文件内容=网页文件内容.replace("$$websitetitle$$",websitetitle)
    网页文件内容=网页文件内容.replace("$$websitekeywords$$",websitekeywords)
    网页文件内容=网页文件内容.replace("$$websitedescription$$",websitedescription)
    网页文件内容=网页文件内容.replace("$$websiteurl$$",websiteurl)
    网页文件内容=网页文件内容.replace("$$FirstPage$$",FirstPage)
    网页文件内容=网页文件内容.replace("$$LastPage$$",LastPage)    
    网页文件内容=网页文件内容.replace("$$CurrentPage$$",CurrentPage)    
    网页文件内容=网页文件内容.replace("$$NextPage$$",NextPage)
    网页文件内容=网页文件内容.replace("$$EndPage$$",EndPage)
    网页文件内容=网页文件内容.replace("$$websitecontent$$",websitecontent)
    网页文件内容=网页文件内容.replace("$$总页数$$",str(总页数))    


    文件名=写入文件夹 +"/" + CurrentPage + 扩展名
    写文件(文件名,网页文件内容)
    print(文件名 + ":: 写入完毕。")


#主程序从这里开始
    
hashdict={}   #把所有的文件名装到这个字典里
目录="D:\我的文档"
计数器=0
for item in os.walk(目录):        #返回的是三元组
    for eachfile in item[2]:
        filenamewithpath=item[0] + "\\" + eachfile
        filename=eachfile.translate(non_bmp_map)        
        计数器=计数器+1
        文件大小=round(os.path.getsize(filenamewithpath)/(1024*1024),2)
        print(计数器,"::",文件大小,"M::",filename)        
        hashdict[getHash(filenamewithpath)]=filenamewithpath #为了使数据不重复


#载入分页模版
网页模版内容=''
pattern=open(webfolder + "\\分页模版.asp",'r',encoding='utf-8')
for eline in pattern:
    网页模版内容=网页模版内容 + eline
pattern.close()


每页数据数=10
总共数据数=len(hashdict)
剩余数据数=总共数据数%每页数据数
能生成的页数=总共数据数//每页数据数
if 剩余数据数>0 : 能生成的页数=能生成的页数 + 1 
                                    
数据总表=list(hashdict.values())
md5数据=list(hashdict.keys())
for i in range(能生成的页数):
    一页数据=[]
    一页md5=[]
    for j in range(每页数据数):
        if 数据总表!=[]:
            一页数据.append(数据总表.pop())
            一页md5.append(md5数据.pop())     #用来取前2个字符,把每个文件详情页都放置在这个文件夹下
            
    生成分页网页(i,能生成的页数,一页数据,一页md5,网页模版内容,webfolder)
        
    














    

猜你喜欢

转载自blog.csdn.net/avskya/article/details/54561431
今日推荐