您的位置:首页 > 编程语言 > Python开发

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

2017-01-15 12:41 453 查看
"""

把文件夹变身为一个网站的神奇程序,使用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>  "

        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)

        

    

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐