程序功能 按文件输出编码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.打开文件夹选择对话框