Nov-03-2023, 10:47 PM
(Nov-03-2023, 03:55 PM)jacksfrustration Wrote: i have the following function:ok i tried changing the mode as you suggested. i have the following code now
my_list=save_ent() new_list=[] for ent in my_list: new_list.append(output_found_flights(ent)) try: data_file=pd.read_csv("flight_data.csv") data_dict=data_file.to_dict(orient="records") except pandas.errors.EmptyDataError: messagebox.showerror(title="Oooops",message="There are no saved information") data_dict=[] finally: for ent in new_list: data_dict.append(ent) try: for i,ent in enumerate(data_dict): res= not all (ent.values()) if str(res): data_dict.pop(i) except AttributeError: data_dict.pop(i) finally: new_data_file=pd.DataFrame(data_dict) new_data_file.to_csv("flight_data.csv",index=False)the problem is the first time i run the code it executes correctly. When i try to add more search results it overwrites the csv file as expected but it gets rid of the previous search result and replaces it with the following
Output:0 ""
my_list=save_ent() new_list=[] for ent in my_list: new_list.append(output_found_flights(ent)) new_data_file=pd.DataFrame(new_list) new_data_file.to_csv("flight_data.csv",index=False,mode="a")but i still get the following addition on my csv file
Output:0
""
in my code i have the output_found_flights function being called. the code for that followsdef output_found_flights(ent): '''connects to the api in order to find flights. information from entries are received generates values in the current entry that is supplied when the function is called and returns the updated dictionary file''' query = { "fly_from": ent['from_iata_code'], "fly_to": ent['to_iata_code'], "date_from": ent['from_time'], "date_to": ent["to_time"], "nights_in_dst_from": 7, "nights_in_dst_to": 28, "flight_type": "round", "one_for_city": 1, "max_stopovers": 0, "curr": "GBP" } headers = { "apikey": API_KEY } endpoint = "https://api.tequila.kiwi.com/v2/search" response = requests.get(url=endpoint, headers=headers, params=query) flights = response.json() try: lowest_price = round(float(ent["lowest_price"]), 2) except ValueError: messagebox.showerror(title="Ooops", message="You have not entered appropriate input for the lowest price variable") for i in range(0, len(flights['data'])): flight_price = round(float(flights['data'][0]['price']), 2) if flight_price <= lowest_price: adult_price=flights['data'][i]['fare']['adults'] children_price=flights['data'][i]['fare']['children'] infants_price=flights['data'][i]['fare']['infants'] total_price=float((adult_price * ent['adults'] ) + (children_price * ent['children']) + (infants_price * ent['infants'])) url = flights['data'][i]['deep_link'] date = flights['data'][i]['local_departure'] date_separator = date.find("T") departure_date = date[:date_separator] date_list = departure_date.split("-") date_formatted = f"{date_list[2]}/{date_list[1]}/{date_list[0]}" ent['trip_date'] = date_formatted ent["ticket_price"] = flight_price ent['total_price']=total_price ent['url'] = url try: if messagebox.askokcancel(title=f"{ent['trip_date']} from {ent['from_city_name']} to {ent['to_city_name']}",message=f"Ticket price is £{ent['total_price']}0\n" f"{int(ent['adults'])} adults are travelling with {int(ent['children'])} children and {int(ent['infants'])} infants.\nPress ok to open the URL in order to buy the tickets"): webbrowser.open(ent['url']) except ValueError: messagebox.showerror(title="Ooops",message="No flights were found") return entent from the output_found_flights gets returned as empty the way i understand it. that is why i included the function code so you can help me figure out how to beat this