繁体   English   中英

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

[英]TypeError: a bytes-like object is required, not 'str' python

我正在尝试在python中运行以下代码:

kf = KFold(n_splits=num_splits)
n = 0
for train_index, test_index in kf.split(mask_list):
    with open(join(outdir,'train_split_' + str(n) + '.csv'), 'wb') as csvfile:
        writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        for i in train_index:
            writer.writerow([basename(mask_list[i])])
    with open(join(outdir,'test_split_' + str(n) + '.csv'), 'wb') as csvfile:
        writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        for i in test_index:
            writer.writerow([basename(mask_list[i])])
    n += 1

但这给了我:

writer.writerow([basename(mask_list[i])])
TypeError: a bytes-like object is required, not 'str'

可能是什么?

CSV是文本文件格式,因此csv模块生成的输出是字符串。 因此,您应该以文本模式而不是二进制模式打开输出文件:

更改:

with open(join(outdir,'train_split_' + str(n) + '.csv'), 'wb') as csvfile:

至:

with open(join(outdir,'train_split_' + str(n) + '.csv'), 'w') as csvfile:

同样适用于其他输出文件。

如果您使用的是python3.X,则可以使用newline=''

例如:

kf = KFold(n_splits=num_splits)
n = 0
for train_index, test_index in kf.split(mask_list):
    with open(join(outdir,'train_split_' + str(n) + '.csv'), 'w', newline='') as csvfile:    #--> !Update
        writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        for i in train_index:
            writer.writerow([basename(mask_list[i])])
    with open(join(outdir,'test_split_' + str(n) + '.csv'), 'w', newline='') as csvfile:    #--> !Update
        writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
        for i in test_index:
            writer.writerow([basename(mask_list[i])])
    n += 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM