Problems saving files

Hi! Help me, please. I need the program to save “tourists” and “cities” data in “.txt” files, but I don’t know how to use file () extension. this is the code that I have put together so far:

def menu():
    print("1. Agregar pasajero")
    print("2. Agregar ciudad")
    print("3. Ver ciudad destino de un pasajero")
    print("4. Cantidad de pasajeros de una ciudad")
    print("5. Ver ciudad destino de un pasajero")
    print("6. Cantidad de pasajeros de una provincia")
    print("7. Salir")

def agregar_pasajero(turistas):
    nombre = raw_input("Ingrese nombre completo: ")
    dni = int(raw_input("Ingrese DNI: "))
    origen = raw_input("Ingrese el origen: ")


    for turista in turistas:
        if turista[1] == dni:
            print "El turista con DNI" ,dni, "ya esta registrado"
            return turistas


    turistas.append((nombre, dni, origen))
    return turistas


def agregar_ciudad(ciudades):
    origen = raw_input("Ingrese nombre de la ciudad: ")
    provincia = raw_input("Ingrese nombre de la provincia: ")


    for ciudad in ciudades:
        if ciudad[0] == origen:
            print "La ciudad",origen, "ya esta registrada"
            return ciudades


    ciudades.append((origen, provincia))
    return ciudades


def ver_ciudad(turistas):
    dni = int(raw_input("Ingrese DNI del pasajero: "))
    encontrado = False
    for turista in turistas:
        if turista[1] == dni:
            print "El pasajero viaja a la ciudad de", turista[2]
            encontrado = True
            break

    if encontrado is False:
        print "El pasajero no esta registrado"


def ver_cantidad_pasajeros_ciudad(turistas):
    contador = 0
    ciudad = raw_input("Ingrese nombre de la ciudad: ")
    for turista in turistas:
        if turista[2] == ciudad:
            contador += 1
    print "Viajan", contador, "a la ciudad de",ciudad


def ver_provincia(turistas):
    dni = int(raw_input("Ingrese DNI del pasajero: "))
    encontrado = False
    for turista in turistas:
        if turista[1] == dni:
            print "El pasajero viaja a la provincia de", turista[2]
            break

    if encontrado is False:
        print "El pasajero no esta registrado"


def ver_cantidad_pasajeros_provincia(turistas, ciudades):
    contador = 0
    provincia = raw_input("Ingrese nombre de la provincia: ")


    ciudades_provincia = []
    for ciudad, provincia in ciudades:
        if provincia_usuario == provincia:
            ciudades_provincia.append(ciudad)
            
    for turista in turistas:
        if turista[2] in ciudades_provincia:
            contador += 1
    print "Viajan", contador, "a la provincia de", provincia


def guardar(turistas, ciudades):
    print("Datos guardados")

    try:    
        f= open(file,"pasajeros.txt", "a")
        for nombre, dni, ciudad in turistas:
                f.write('{}\t{}\t{}\n'.format(nombre, dni, ciudad))

        f= open(file,"ciudades.txt", "a")
        for ciudad, provincia in ciudades:
                f.write('{}\t{}\n'.format(ciudad, provincia))
    except ValueError:
        print("Error!")

def main():
    turistas = []
    ciudades = []
	
    opcion = 0

    while opcion != 7:
        menu()
        opcion = int(raw_input("Elige una opcion: "))

        if opcion == 1:
            turistas = agregar_pasajero(turistas)
        elif opcion == 2:
            ciudades = agregar_ciudad(ciudades)
        elif opcion == 3:
            ver_ciudad(turistas)
        elif opcion == 4:
            ver_cantidad_pasajeros_ciudad(turistas)
        elif opcion == 5:
            ver_provincia(turistas)
        elif opcion == 6:
            ver_cantidad_pasajeros_provincia(turistas, ciudades)
        elif opcion == 7:
            guardar(turistas, ciudades)
        else:
            print("Opcion incorrecta")
	return
main()


Thanks!

1 Like

Instead of:

f= open(file,"pasajeros.txt", "a")
f= open(file,"ciudades.txt", "a")

You should call the function as:

f= open("pasajeros.txt", "a")
f= open("ciudades.txt", "a")

I can’t tell why you’re providing file as first parameter. When the first one and required parameter is the filename path or just the filename if It’s located at the same root folder as your script, the rest of parameters are optional, although if you don’t provide a mode parameter It will open as read-only. In this case “append” mode is alright for your purposes .