Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] O arquivo nao está gravar perguntas

# Criando a lista com dez elementos
listas_de_perguntas = [
    "Qual é a sua cor favorita?",
    "Quantos anos você tem?",
    "Qual é a capital do Brasil?",
    "Você prefere Python ou Java?",
    "Qual é o seu prato predileto?",
    "Em que ano nós estamos?",
    "Você gosta de viajar?",
    "Qual é o seu maior sonho?",
    "Qual é o nome do seu animal de estimação?",
    "Qual linguagem de programação você está aprendendo?"
]

def criar_arquivo(nome_arquivo, conteudo):
  arquivo_gerado = ""
  with open(f"{nome_arquivo}.txt","w", encoding = "utf-8") as arquivo:
        for item in conteudo:
          arquivo_gerado = arquivo.write(f"{item} \n")
        
  return arquivo_gerado
  
perguntas = criar_arquivo("perguntas", listas_de_perguntas)
def ler_arquivo_txt(arquivo_txt):
  conteudo = []
  with open(f"{arquivo_txt}.txt", "r") as arquivo:
    for linha in arquivo:
      conteudo.append(linha.strip())
  return conteudo
  
perguntas_do_arquivo = ler_arquivo_txt("perguntas")
def criar_arquivo_csv(nome_arquivo, cabecalho, conteudo):
  arquivo_gerado = ""
  with open(f"{nome_arquivo}.csv","w",encoding = "utf-8") as arquivo:
    arquivo_gerado = arquivo.writelines(f"{cabecalho}\n")
        
    for item in conteudo:
      arquivo_gerado = arquivo.write(f"{item}\n")
  return arquivo_gerado


cabecalho = ["perguntas,"]
criar_arquivo_csv("perguntas", cabecalho, perguntas_do_arquivo)
1 resposta

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

Imagem da comunidade