Olá Durão, tudo bem com você?
O comportamento que você está vendo tem uma causa bem específica: o método write() retorna um número inteiro (a quantidade de caracteres escritos), não o conteúdo que foi escrito. Então, quando você faz arquivo_gerado = arquivo.write(...), a variável vai receber esse número, e não o texto das perguntas.
Mas olhando com atenção, o arquivo .txt está sendo criado e preenchido normalmente. O write() grava tudo certo, a questão é só o que você faz com o retorno dele.
O problema que provavelmente está te incomodando está aqui:
cabecalho = ["perguntas,"]
criar_arquivo_csv("perguntas", cabecalho, perguntas_do_arquivo)
O cabecalho está sendo passado como uma lista com um único item "perguntas,". Dentro da função, você usa arquivo.writelines(f"{cabecalho}\n"), o que vai gravar literalmente ['perguntas,'] no arquivo (incluindo os colchetes e as aspas), em vez de só perguntas.
Tente passar o cabeçalho como uma string simples:
cabecalho = "perguntas"
criar_arquivo_csv("perguntas", cabecalho, perguntas_do_arquivo)
E dentro da função, o writelines pode ser trocado por write, já que você está passando uma string:
arquivo.write(f"{cabecalho}\n")
Com esse ajuste, o CSV vai ficar com o cabeçalho correto na primeira linha, seguido de cada pergunta nas linhas seguintes.
Tenta fazer essa mudança e me conta se funcionou!
Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.
Bons estudos!
Sucesso ✨