本文实例讲述了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程序设计有所帮助。