python查看文件编码方式_Python实现批量查看文件编码

想要批量查看指定目录下的文件编码格式,发现Python使用chardet比较方便,而且编码相对全面,功能也比较强大,就用Python编写了一下自动遍历目录及子目录下所有文件并查看编码方式

结果可输出至文件或者控制台窗口

支持命令行形式传参

"""

实现功能:

查看指定目录下所有文件的文件编码

调用方式:

ViewFileDecode.py -i <文件目录> -o <输出文件路径> -s <是否包含子目录,1表示包含,其他值不包含子目录>

备注:

默认包含子目录

"""

import sys,getopt,os,chardet

def view_file_decode(filename):

data =open(filename, "rb").read()

return chardet.detect(data)

def get_file_path(root_path,file_list,dir_list,in_subdir = 1):

#获取该目录下所有的文件名称和目录名称

dir_or_files = os.listdir(root_path)

for dir_file in dir_or_files:

#获取目录或者文件的路径

dir_file_path = os.path.join(root_path,dir_file)

#判断该路径为文件还是路径

if os.path.isdir(dir_file_path):

dir_list.append(dir_file_path)

#递归获取所有文件和目录的路径

if in_subdir == 1 or in_subdir == '1':

get_file_path(dir_file_path,file_list,dir_list,in_subdir)

else:

file_list.append(dir_file_path)

def main(argv):

inputfolder = ""

outputfile = ""

subdir = 1

try:

opts,args = getopt.getopt(argv,"hi:o:s:",["ifile=","ofile=","subdir="])

except getopt.GetoptError:

print("ViewFileDecode.py -i -o -s ")

sys.exit(2)

for opt,arg in opts:

if opt == "-h":

print("ViewFileDecode.py -i -o -s ")

elif opt in ("-i","--ifile"):

inputfolder = arg

elif opt in ("-o","--ofile"):

outputfile = arg

elif opt in ("-s","--subdir"):

subdir = arg

# 用来存放所有的文件路径

file_list = []

# 用来存放所有的目录路径

dir_list = []

get_file_path(inputfolder, file_list, dir_list,subdir)

#print(inputfolder,"--",outputfile,"--",subdir)

#如果输出文件不为空,则输出到输出文件,否则输出到控制台窗口

if not outputfile:

for file in file_list:

print(file, "-->", view_file_decode(file))

else:

fo = open(outputfile,"a+")

for f in file_list:

fo.write('{0}-->{1}\r\n'.format(f,view_file_decode(f)))

fo.close()

"""

手动查看方式,manual_view,传递一个路径即可,自动返回遍历到的所有文件的编码信息

folderpath:遍历的路径,如:r"J:\AntiNetTimeout\AntiNetTimeout"

outfile:输出文件,结果将导出到该文件中,如:r"J:\outfile.txt"

in_subdir:是否包含子目录,如果值为1,则会遍历子目录下的所有文件,如果不为1,则只遍历当前目录下的文件

示例代码:

#输出结果到控制台

manual_view(r"J:\Test",r"",1)

#输出结果到指定文件

manual_view(r"J:\Test",r"J:\log.txt",1)

"""

def manual_view(folderpath,outfile,in_subdir = 1):

#根目录路径

root_path = folderpath

#用来存放所有的文件路径

file_list = []

#用来存放所有的目录路径

dir_list = []

get_file_path(root_path,file_list,dir_list,in_subdir)

if not outputfile:

for file in file_list:

print(file, "-->", view_file_decode(file))

else:

fo = open(outputfile,"a+")

for f in file_list:

fo.write('{0}-->{1}\r\n'.format(f,view_file_decode(f)))

fo.close()

运行后结果如下所示:

resource.h-->{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

soso.aps-->{'encoding': 'TIS-620', 'confidence': 0.24910699294811314, 'language': 'Thai'}

soso.cpp-->{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

soso.rc-->{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

soso.vcproj-->{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

soso.vcproj.QW-PC.QW.user-->{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

soso.vcproj.wodeafei-PC.wodeafei.user-->{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

stdafx.h-->{'encoding': 'ISO-8859-1', 'confidence': 0.6940983606557376, 'language': ''}

TestBtn.h-->{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

sys_wnd_bkgnd.png-->{'encoding': 'Windows-1254', 'confidence': 0.2699406059988939, 'language': 'Turkish'}

sys_xml_msgbox.xml-->{'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}

sys_xml_skin.xml-->{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

souieditor.rar-->{'encoding': None, 'confidence': 0.0, 'language': None}

Swedish.lng-->{'encoding': 'UTF-16', 'confidence': 1.0, 'language': ''}

需要安装chardet模块,按装方法请自行百度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值