Write me a python code that processes a CSV file with the following structure ["Name","URL","Rating"], download each image under the URL row as save as PNG, use the Name as the file name and save it under a subfolder using the Rating as name, add a tkinter GUI to let me choose the CSV file and output path.
user
import csv
import requests
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

def process_csv(csv_file, output_path):
    with open(csv_file, "r") as file:
        reader = csv.reader(file)
        header = next(reader) # skip the header row
        for row in reader:
            name, url, rating = row
            response = requests.get(url)
            if response.status_code == 200:
                subfolder = output_path + "/" + rating
                if not os.path.exists(subfolder):
                    os.makedirs(subfolder)
                file_path = subfolder + "/" + name + ".png"
                with open(file_path, "wb") as f:
                    f.write(response.content)
            else:
                messagebox.showerror("Error", f"Failed to download {name} from {url}")

def select_csv():
    csv_file = filedialog.askopenfilename(initialdir = "/", title = "Select CSV file", filetypes = (("CSV files", "*.csv"), ("all files", "*.*")))
    if csv_file:
        return csv_file

def select_output_path():
    output_path = filedialog.askdirectory(initialdir = "/", title = "Select output path")
    if output_path:
        return output_path

root = tk.Tk()
root.withdraw()
csv_file = select_csv()
if csv_file:
    output_path = select_output_path()
    if output_path:
        process_csv(csv_file, output_path)
        messagebox.showinfo("Success", "Processing completed")
assistant
When I run the provided code, I get the error "NameError: name 'os' is not defined". You should add "import os" to the top of the file.
user