本文实例讲述了Python实现批量转换文件编码的方法。分享给大家供大家参考。具体如下:
这里将某个目录下的所有文件从一种编码转换为另一种编码,然后保存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import os import shutil def match(config,fullpath, type ): flag = False if type = = 'exclude' : for item in config[ 'src' ][ 'exclude' ]: if fullpath.startswith(config[ 'src' ][ 'path' ] + os.path.sep + item): flag = True break if type = = 'filter' : for item in config[ 'src' ][ 'filter' ]: if fullpath.endswith(item): flag = True break return flag def conver_file(param): for root, dirs, files in os.walk(param[ 'src' ][ 'path' ]): for filename in files: readfile = root + os.path.sep + "%s" % filename print (readfile) if 'filter' in param[ 'src' ]: if not (match(param,readfile, 'filter' )): continue s = '' outfile = readfile.replace(param[ 'src' ][ 'path' ],param[ 'dest' ][ 'path' ]) try : s = open (readfile,encoding = param[ 'src' ][ 'encoding' ]).read() except : print ( "file %s read erro" % readfile) shutil.copy(readfile,outfile) if s: #False and print ( "save" ) with open (outfile, mode = 'w' , encoding = param[ 'dest' ][ 'encoding' ]) as a_file: a_file.write(s) for dirname in dirs: file = root + os.path.sep + "%s" % dirname if 'exclude' in param[ 'src' ]: if (match(param, file , 'exclude' )): continue outdir = file .replace(param[ 'src' ][ 'path' ],param[ 'dest' ][ 'path' ]) #print(outdir) if not os.path.isdir(outdir): os.mkdir(outdir) if __name__ = = "__main__" : param = { 'src' :{ 'path' :r 'D:\work\test\trunk' , 'encoding' : 'gbk' , 'exclude' :[ 'dataa' ], 'filter' :[ '.php' , '.html' , '.htm' ]}, 'dest' :{ 'path' : "f:\\test\\new" , 'encoding' : 'utf-8' }} conver_file(param) |
希望本文所述对大家的Python程序设计有所帮助。