Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从一个csv中删除一行数据并将其写入另一个csv?_Python_Python 3.x_Dataframe_Csv_Tkinter - Fatal编程技术网

Python 如何从一个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

我试图激活我的确认按钮,从现有公园中删除公园名称,并将其写入已访问公园的新csv。因此,如果csv不存在,程序第一次需要创建新的csv。基本上,它将在新的csv中记录访问过的公园。以下是我尝试过但没有执行的内容(请参见
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)
    

    通过上述更改,不需要“停车”按钮。

    在此处提问时,最好提供,但不幸的是,您的问题中有许多不相关的内容,远远超过重现问题所需的最低限度。