在写对比文件差异的脚本时,运行脚本报错:
TypeError: a bytes-like object is required, not ‘str’
处理方法如下:
1.使用codecs模块
2.原代码为:
fileHandle = open(filename, 'rb')
#此写法用于python2.x版本,因为我的版本为python3.6,所以需要做以下更改
3.更改后的代码为
import codecs
fileHandle = codecs.open(filename, 'rb', 'utf-8')
#将读取的文件类型进行转换
4.脚本完整代码
#!/usr/bin/python3
#-*-coding:UTF-8-*-
import sys
import codecs
import difflib
try:
textfile1 = sys.argv[1]
textfile2 = sys.argv[2]
except Exception as e:
print('Error:',str(e))
sys.exit()
def readfile(filename): #文件读取分隔函数
try:
# fileHandle = open(filename, 'rb') 此方法为python2的写法
fileHandle = codecs.open(filename, 'rb', 'utf-8') #python3中使用codecs进行类型转
换,否则报错TypeError: a bytes-like object is required, not 'str'
text = fileHandle.read().splitlines()
fileHandle.close()
return text
except IOError as error:
print('Read file Error:',str(error))
sys.exit()
#print(readfile(textfile1))
text1_lines = readfile(textfile1) #调用readfile函数获取分隔后的字符串
text2_lines = readfile(textfile2)
d = difflib.HtmlDiff() #创建HtmlDiff()类对象
print(d.make_file(text1_lines,text2_lines)) #通过make_file方法输出HTML格式的对比结果