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