python一键探测编码

程序功能 按文件输出编码or按编码输出文件

1.实现输出全部文件的编码
2.实现输出指定文件类型的编码
3.实现输出(非)指定编码的文件名

源码

import os
import chardet
from tkinter import filedialog
#获取全部文件的编码
def get_all_chardet(filename): #获取符合条件的文件的编码
f3 = open(file=filename,mode='rb') #以二进制模式读取文件
data = f3.read() #获取文件内容
#print(data)
f3.close() #关闭文件
result = chardet.detect(data) #检测文件内容
#print(result) #输出{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
a=list(result.values()) #values获取输出值;keys获取输出字段
print(a[0]) #获取编码
def all_chardet_files(Folderpath): #检测所有文件
for filepath,dirnames,filenames in os.walk(Folderpath): #遍历文件
for filename in filenames:
full_path = os.path.join(filepath,filename)
print(full_path)
get_all_chardet(full_path) #获取编码
#输出指定文件类型的编码
def by_filetype(Folderpath): #检测指定文件类型的文件
filetype = input('输入指定文件类型,例如.xml: ')
for filepath,dirnames,filenames in os.walk(Folderpath): #遍历文件
for filename in filenames:
if os.path.splitext(filename)[1] == filetype: #指定文件类型
full_path = os.path.join(filepath,filename)
print(full_path)
get_all_chardet(full_path) #获取编码
#输出指定编码的文件
def get_specified_chardet(filename,b): #获取指定编码的文件的编码
f3 = open(file=filename,mode='rb') #以二进制模式读取文件
data = f3.read() #获取文件内容
f3.close()
result = chardet.detect(data) #检测文件内容
a=list(result.values()) #values获取输出值;keys获取输出字段
if a[0] == b:
print(filename)
def specified_chardet_files(Folderpath): #输出特定编码的文件
b = input("请输入需要检测的编码:")
print("编码是"+b+"的文件如下:")
for filepath,dirnames,filenames in os.walk(Folderpath): #遍历文件
for filename in filenames:
full_path = os.path.join(filepath,filename)
get_specified_chardet(full_path,b)
#输出非指定编码的文件
def get_no_specified_chardet(filename,b): #获取不符合编码的文件的编码
f3 = open(file=filename,mode='rb') #以二进制模式读取文件
data = f3.read() #获取文件内容
f3.close()
result = chardet.detect(data) #检测文件内容
a=list(result.values()) #values获取输出值;keys获取输出字段
if a[0] != b:
print(filename)
def no_specified_chardet_files(Folderpath): #输出特定编码的文件
b = input("请输入需要检测的编码:")
print("编码不是"+b+"的文件如下:")
for filepath,dirnames,filenames in os.walk(Folderpath): #遍历文件
for filename in filenames:
full_path = os.path.join(filepath,filename)
get_no_specified_chardet(full_path,b)
def case():
print("utf-8 GB2312 ascii 等")
print("1.输出所有文件的编码")
print("2.输出指定类型文件的编码")
print("3.输出指定编码的文件")
print("4.输出非指定编码的文件")
a = int(input("请输入选项:"))
if a == 1:
all_chardet_files(Folderpath)
elif a == 2:
by_filetype(Folderpath)
elif a == 3:
specified_chardet_files(Folderpath)
elif a == 4:
no_specified_chardet_files(Folderpath)
if __name__ == '__main__':
print("输入需要检测的路径")
Folderpath = filedialog.askdirectory() #获得选择好的文件夹
print("检测的路径是"+Folderpath)
case()
ask = input("是否继续?y or exit").lower()
while ask == 'y':
case()

主要代码功能

1.实现文件遍历

2.chardet获取编码

3.传参,对符合编码条件的文件输出

4.打开文件夹选择对话框

posted @   孙犯困  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示