/ / Como parar de sobrescrever um arquivo? - python, python-3.5

Como parar de sobrescrever um arquivo? - python, python-3.5

Meu programa pega dados que foram criadosdurante o curso do programa e, no final, o usuário tem a opção de exportar esses dados para um arquivo .txt ou não. Se eu inserir um valor para o FileName que já existe, o programa deve perguntar ao usuário se ele deseja substituir o arquivo .txt atual. Durante meu código, se eu inserir o valor que já existe, ele sobrescreve esses dados em vez de seguir a próxima linha de código. Já vi outros artigos dizendo para usar "a" para acrescentar, mas não vejo como isso teria alguma relevância para este programa.

(Um arquivo temporário já é criado anteriormente no programa e, se o usuário optar por exportar dados, o arquivo será simplesmente renomeado. Se o usuário não desejar, ele excluirá o arquivo.)

def export():
fileName = input(FileNameText)
exist = os.path.isfile(fileName)
if exist == True:
print("This file name already exists.")
while True:
try:
overWrite = input("Would you like to overwrite the file? Y = yes, N = non")
if overWrite == "Y":
break
if overWrite == "N":
export()
else:
invalidInput()
except:
invalidInput()
os.rename("temp.txt",fileName+".txt")
if exist == False:
os.remove("temp.txt")

Respostas:

2 para resposta № 1

Isso deve funcionar bem:

import os

while True:
filename = input("Provide the file path::n")
if os.path.isfile(filename ):
overwrite = input("File already exists. Overwrite? Y = yes, N = non")
if overwrite.lower() == "y":
# call the function that writes the file here. use "w" on the open handle
break

0 para resposta № 2

Verifique seu fluxo de execução - sua instrução break envia você para fora do loop e a primeira instrução depois de o loop sobrescreve seu arquivo:

    while True:
try:
overWrite = input("Would you like to overwrite the file? Y = yes, N = non")
if overWrite == "Y":
# this will send you out of the loop
# to the point marked "here"
break
if overWrite == "N":
export()
else:
invalidInput()
except:
invalidInput()

# here
os.rename("temp.txt",fileName+".txt")