Python 如何从一个csv中删除一行数据并将其写入另一个csv?
我试图激活我的确认按钮,从现有公园中删除公园名称,并将其写入已访问公园的新csv。因此,如果csv不存在,程序第一次需要创建新的csv。基本上,它将在新的csv中记录访问过的公园。以下是我尝试过但没有执行的内容(请参见Python 如何从一个csv中删除一行数据并将其写入另一个csv?,python,python-3.x,dataframe,csv,tkinter,Python,Python 3.x,Dataframe,Csv,Tkinter,我试图激活我的确认按钮,从现有公园中删除公园名称,并将其写入已访问公园的新csv。因此,如果csv不存在,程序第一次需要创建新的csv。基本上,它将在新的csv中记录访问过的公园。以下是我尝试过但没有执行的内容(请参见def confirm\u park())。我有点迷路了。有什么建议或提示可以帮助我前进吗 from tkinter import * from tkinter import messagebox import pandas import random import csv BA
def confirm\u park()
)。我有点迷路了。有什么建议或提示可以帮助我前进吗
from tkinter import *
from tkinter import messagebox
import pandas
import random
import csv
BACKGROUND_COLOR = "#006600"
BUTTON_COLOR = "#6699ff"
# try:
# data = pandas.read_csv("data/stl_parks_visited.csv")
# except FileNotFoundError:
# original_data = pandas.read_csv("data/stl_parks_list.csv")
# to_learn = original_data.to_dict(orient="records")
# else:
# to_learn = data.to_dict(orient="records")
def new_park():
with open("stl_parks_list.csv") as f:
park = f.readlines()
chosen_park = random.choice(park)
canvas.itemconfig(park_text, text = chosen_park)
def confirm_park():
park.remove(chosen_park)
print(len(park))
data = pandas.DataFrame(park)
data.to_csv("data/stl_parks_visited.csv", index=False)
# --- UI Setup ---
window = Tk()
window.title("St. Louis Parks at Random")
window.config(padx=20, pady=20, bg=BACKGROUND_COLOR)
canvas = Canvas(width=300, height=100, bg="white")
park_text = canvas.create_text(
150,
65,
text='Ready, set,\n"GET PARK"',
width=280,
fill=BACKGROUND_COLOR,
font=("Ariel", 20, "italic")
)
canvas.grid(row=1, column=0, columnspan=2, pady=20, sticky="NESW")
# arch_img = PhotoImage(file="gateway-arch-park.png")
# canvas.create_image(226, 159, image=arch_img)
# canvas.config(bg=BACKGROUND_COLOR, highlightthickness=0)
# canvas.grid(row=0, column=0, columnspan=2, sticky='')
# --- Label ---
website_label = Label(text="St. Louis Parks at Random", fg="white", bg=BACKGROUND_COLOR)
website_label.grid(column=1, row=0, columnspan=2)
# --- Buttons ---
# "Get Park" button generates a random park name from the stl_parks_list.csv
get_park_button = Button(text="GET PARK", width=20, bg=BUTTON_COLOR, font=("bold"), command=new_park)
get_park_button.grid(column=0, row=2, columnspan=2, sticky='', pady=20)
# "Confirm" button cornfirms that you want to visit this park. The park name will then be moved to a new csv of stl_visited_parks.csv and removed from the stl_parks_list.csv.
confirm_button = Button(text="CONFIRM", width=10, bg=BUTTON_COLOR, font=("bold"), command=confirm_park)
confirm_button.grid(column=0, row=3)
# Push the "Skip" button to skip the park and get a different suggestion. Park names remain on the parks list until they are confirmed.
skip_button = Button(text="SKIP", width=10, bg=BUTTON_COLOR, font=("bold"), command=new_park)
skip_button.grid(column=1, row=3)
new_park()
window.mainloop()
尝试在
.to_csv()
方法中使用mode='a'
参数,仅当文件不存在时才写入头:
import os
def confirm_park():
park.remove(chosen_park)
print(len(park))
data = pandas.DataFrame(park)
file = "data/stl_parks_visited.csv"
data.to_csv(file, index=False, mode='a', header=os.path.isfile(file))
您的代码中几乎没有问题:
park
和choosed\u park
是new\u park()
中的局部变量,因此无法在confirm\u park()中访问它们。它们需要在new\u park()
中声明为全局
new_park()
外部的停车场列表,然后在函数中随机选择一个停车场
选择的\u park
保存到stl\u parks\u visted.csv
park
是一个公园名称列表,每个公园名称后面都有“\n”。使用park=f.read().splitlines()
删除尾随“\n”
stl_park_list.csv
仅在每行中包含公园名称。因此,不需要使用pandas
将列表park
转换为数据帧并将数据帧保存到文件。只需使用简单的文件操作将所选的_park追加到输出文件就足够了
下面是修改的新建停车场()
和确认停车场()
:
打开(“stl\u parks\u list.csv”)作为f:
驻车=f.read().splitlines()
def new_park():
环球精选公园
选择的公园=随机的。选择(公园)
canvas.itemconfig(park\u text,text=selected\u park)
def confirm_park():
停车。移除(选定的停车)
印刷品(透镜(公园))
打开(“数据/stl\u parks\u visited.csv”,“a”)作为f:
打印(已选择,文件=f)
通过上述更改,不需要“停车”按钮。在此处提问时,最好提供,但不幸的是,您的问题中有许多不相关的内容,远远超过重现问题所需的最低限度。