TypeError:“str”对象的描述符“encode”不适用于“tuple”对象

Posted

技术标签:

【中文标题】TypeError:“str”对象的描述符“encode”不适用于“tuple”对象【英文标题】:TypeError: descriptor 'encode' for 'str' objects doesn't apply to a 'tuple' object 【发布时间】:2020-03-18 17:57:08 【问题描述】:

请帮助修复 TypeError。它适用于 python 2,但不适用于 python 3。

Python2:

def ExchangeColumns(RECXX_Output,Modified_Recxx_Output,column1,column2,column3,column4,column5,column6):
with open(RECXX_Output) as infile ,open(Modified_Recxx_Output, 'wb') as outfile:
        reader = csv.DictReader(infile)
        append = (column1,column2,column3,column4,column5,column6)
        outfile.write(','.join(append)+'\n')

Python3:

def ExchangeColumns(RECXX_Output,Modified_Recxx_Output,column1,column2,column3,column4,column5,column6):
    with open(RECXX_Output) as infile ,open(Modified_Recxx_Output, 'wb') as outfile:
        reader = csv.DictReader(infile)
        append = (column1,column2,column3,column4,column5,column6)
        appendb =  str.encode(append)
        outfile.write(b','.join(appendb)+b'\n')
        ##outfile.write(b','.join(append).encode(encoding='utf-8')+b'\n')

【问题讨论】:

需要最少的可重现代码来帮助您找到解决方案 另外,你为什么把它写成字节串? outfile.write(b','.join(appendb)+b'\n') 而不仅仅是 outfile.write(','.join(appendb)+'\n')? outfile.write(','.join(appendb)+'\n') - 仍然出现相同的错误 - TypeError: 'str' 对象的描述符 'encode' 不适用于“元组”对象 【参考方案1】:

答案就在问题中——你有一个元组对象而不是字符串。

【讨论】:

请告诉我是否有办法将上述python2代码转换为python3。对于其他线程/站点上建议的大多数方法,我都遇到了错误【参考方案2】:

将文件打开为 'w' 而不是 'wb' 后它工作了

with open(RECXX_Output) as infile ,open(Modified_Recxx_Output, 'w') as outfile:

【讨论】:

以上是关于TypeError:“str”对象的描述符“encode”不适用于“tuple”对象的主要内容,如果未能解决你的问题,请参考以下文章

python向mysql插入数据一直报TypeError: must be real number,not str

TypeError:“datetime.datetime”对象的描述符“date”不适用于“datetime.date”对象

Django 预览,TypeError:'str' 对象不可调用

TypeError:需要一个类似字节的对象,而不是“str”

TypeError:需要一个类似字节的对象,而不是'str'-python 2到3 [重复]

TypeError:'str' 对象在 main.py 的第 200 行不可调用