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 @ 2022-07-11 14:26  孙犯困  阅读(155)  评论(0编辑  收藏  举报