TypeError: требуется байтоподобный объект, а не "str" python

1

Я пытаюсь запустить этот код в 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'

Что может быть?

  • 0
    используйте w вместо wb при открытии файла.
Теги:
types

2 ответа

0

Если вы используете 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
0

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:

То же самое относится к другому выходному файлу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню