# encoding: utf-8
# 版权所有 2023 涂聚文有限公司
# 许可信息查看:
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 311
# Datetime : 2023/7/9 19:12
# User : geovindu
# Product : PyCharm
# Project : pythonTkinterDemo
# File : FileLib.py
# explain : 学习
import os
import sys
import shutil
from PIL import Image,ImageSequence
import glob
import pyzbar.pyzbar as p
import pyqrcode
import qrcode
class FileHelper(object):
"""
简单的文件帮助
"""
global cdir
"""
计算文件夹的数量
"""
global cfile
"""
计算文件的数量
"""
global allfiles
"""
所有文件夹和文件
"""
def __init__(self):
"""
构造方法
"""
self.__path=""
self.cdir=1
self.cfile=1
self.allfiles=list()
@property
def Path(self):
return self.__path
@Path.setter
def Path(self,path):
self.__path=path
def dirAllFile(self,pathname):
"""
迭代遍历文件夹下的子文件夹和文件 iterate 迭代
:param pathname: 所要遍历的文件夹的地址(root) 遍历相对的的根目录文件夹地址
:return:返回最后一次遍历文件夹的文件
"""
files = list()
if os.path.exists(pathname):
filelist = os.listdir(pathname)
for f in filelist:
f = os.path.join(pathname, f)
if os.path.isdir(f):
self.cdir+=1
self.dirAllFile(f)
else:
dirname = os.path.dirname(f)
baseName = os.path.basename(f)
if os.path.isfile(f):
files.append(f)
self.cfile+=1
self.allfiles.append(files)
return files #最后一次遍历的
def traversalFiles(self):
"""
只是当前文件夹下的,子文件夹的没有列出
:return:
"""
dirs=[]
files=[]
#global cdir=1
#global cfile=1
for item in os.scandir(self.__path):
if item.is_dir():
dirs.append(item.path)
cdir+=1
elif item.is_file():
files.append(item.path)
cfile+=1
#traversalFiles(self)
print('文件夹:')
print('\n'.join(dirs))
print('\n文件:')
print('\n'.join(files))
print(f"文件夹个数:{cdir},文件个数:{cfile}:")
def displayFileLsit(self):
"""
:return:
"""
paths = os.walk(f'{self.__path}')
cou = 0
for path, dir_lst, file_lst in paths:
for file_name in file_lst:
print(os.path.join(path, file_name))
cou += 1
print("共有文件:", cou)
# 创建文件方法
def mkdirFile(self, writestring:str):
"""
没有文件夹创建,把内容写入TEXT文本文件中
:param folder: 文件夹名称
:param writestring: 要写的内容
:return: None
"""
i = 1
while True:
# 判断是否文件存在,如果不存在则创建,存在则改名
f_p_intact = self.__path + "\\geovindu" + str(i) + ".txt"
# 打印完整文件名称
print("已创建的文件是:",f_p_intact)
if not os.path.exists(f_p_intact):
# 文件的写操作
f = open(f_p_intact, "w+",encoding='utf8')
f.write(writestring)
# 关闭文件流
f.close()
break
else:
i += 1
def makeGif(self,framefolder):
"""
生成GIF动画图片
:param framefolder: 文件夹
:return:
"""
images = glob.glob(f"{self.__path}/*.png")
images.sort()
frames = [Image.open(image) for image in images]
frame_one = frames[0]
print(frame_one)
frame_one.save(framefolder+"/geovindu.gif", format="gif", append_images=frames,
save_all=True, duration=50, loop=0)
def generateQrCode(self,qrcodestr:str,qrcodefile:str):
"""
生成二维码
:param qrcodestr: 二要生成的二给码字符
:param qrcodefile: 生成的文件名
:return:
"""
img = qrcode.make(qrcodestr)
type(img)
img.save(f'{qrcodefile}.png')
def readQrCode(self,qrcodefile:str):
"""
读二维码
:param qrcodefile: 二维码文件名
:return: 返回二维码内容
"""
nowpath = os.getcwd()
scrimg=Image.open(f"{nowpath}\{qrcodefile}.png")
m=p.decode(scrimg)
codedata=m[0].data.decode("utf-8")
return codedata
调用:
nowpath = os.getcwd()
f=Common.FileLib.FileHelper()
f.Path=nowpath
#f.displayFileLsit()
#f.traversalFiles()
files=f.dirAllFile(nowpath)
allf=f.allfiles
print(len(allf))
for ff in allf:
for df in ff:
if not df==[]:
print(df)
print(f"文件夹数量:{f.cdir} 文件数量:{f.cfile}")
nowpath = os.getcwd() #当前项目文件夹
generateQrCode("http://www.dusystem.com","geovindu")
codedata=readQrCode("geovindu")
print("qrcode:",codedata)
输出: