【问题标题】:Get a row of data and display in table using pickle load?使用pickle load获取一行数据并显示在表格中?
【发布时间】:2020-05-08 10:22:27
【问题描述】:

我是 Python 新手,刚刚学习。我已经使用 pickle dump 将类对象存储到使用 wb 的文本文件中,效果很好。我现在需要根据用户输入的日期从文件中获取特定的数据行。如何使用 pickle.load 执行此操作?这将需要显示在表格中。

class LotteryDraw():

    def __init__(self,date,ball_1,ball_2,ball_3,ball_4,ball_5,ball_6,bonus_ball):

        self.date = date
        self.ball_1 = ball_1
        self.ball_2 = ball_2
        self.ball_3= ball_3
        self.ball_4 = ball_4
        self.ball_4 = ball_4
        self.ball_5 = ball_5
        self.ball_5 = ball_5
        self.ball_6 = ball_6
        self.bonus_ball = bonus_ball
def add_data(LotteryDraw):

    lottery_list = []

    date= valid_date() # calls valid_date() gets date and checks in valid format
    ball_1 = input('\tEnter number for ball 1: ') # gets ball 1 input then ball 2 etc
    ball_2 = input('\tEnter number for ball 2: ')
    ball_3 = input('\tEnter number for ball 3: ')
    ball_4 = input('\tEnter number for ball 4: ')
    ball_5 = input('\tEnter number for ball 5: ')
    ball_6 = input('\tEnter number for ball 6: ')
    bonus_ball = input('\tEnter bonus ball number: ')
    lottery_list.append(LotteryDraw(date,ball_1,ball_2,ball_3,ball_4,ball_5,ball_6,bonus_ball))

    save(lottery_list)

    return lottery_list
def save(lottery_list):

    with open("lottery_draw2.txt", mode="wb") as filename:
        pickle.dump(lottery_list, filename)
    print("Data saved to file.")
    print()

    return filename

【问题讨论】:

  • 你转储的数据的数据结构是什么?如果您想将日期和自定义对象存储为键值对,例如 :,那么您可以使用 d = {}、d[str(datetime.now())] = 之类的字典。下次您加载文件时,您只需按 d[] 之类的键搜索字典。更多w3schools.com/python/python_datetime.asp
  • 这是一个类的属性列表。
  • 转储的列表有所有属性的记录..date,ball 1等。然后我需要加载与用户输入的某个日期匹配的数据行。
  • 我不清楚你的意思是什么。类的属性列表,你的意思是类属性?你在哪里可以找到行数据结构?
  • 抱歉是类属性。

标签: python file load row pickle


【解决方案1】:

我已经尽力回答你了。 The code:

import pickle
import os.path

class LotteryDraw():
    def __init__(self,date,ball_1,ball_2,ball_3,ball_4,ball_5,ball_6,bonus_ball):
        self.date = date
        self.ball_1 = ball_1
        self.ball_2 = ball_2
        self.ball_3 = ball_3
        self.ball_4 = ball_4
        self.ball_4 = ball_4
        self.ball_5 = ball_5
        self.ball_5 = ball_5
        self.ball_6 = ball_6
        self.bonus_ball = bonus_ball

    def print_details(self):
        print('object values: ',self.ball_1, self.ball_2, self.ball_3, self.ball_4, self.ball_5, self.ball_6, self.bonus_ball)

def valid_date(date):
    # do some validity check
    is_valid = True # hardcoded to true
    return is_valid, date

def add_data():
    if(os.path.isfile("lottery_draw2.p")):
        lottery_list = pickle.load(open( "lottery_draw2.p", "rb" ))
    else:
        # that means no such file name exists, we need to create empty list
        lottery_list = []

    is_valid, date= valid_date(input('Enter date: ')) # calls valid_date() gets date and checks in valid format

    while(not is_valid):
        # loop until user gives correct format
        print('please input correct date')
        is_valid, date= valid_date(input('Enter date: '))

    ball_1 = input('\tEnter number for ball 1: ') # gets ball 1 input then ball 2 etc
    ball_2 = input('\tEnter number for ball 2: ')
    ball_3 = input('\tEnter number for ball 3: ')
    ball_4 = input('\tEnter number for ball 4: ')
    ball_5 = input('\tEnter number for ball 5: ')
    ball_6 = input('\tEnter number for ball 6: ')
    bonus_ball = input('\tEnter bonus ball number: ')
    lottery_list.append(LotteryDraw(date,ball_1,ball_2,ball_3,ball_4,ball_5,ball_6,bonus_ball))

    save(lottery_list)
    return lottery_list

def save(lottery_list):
    pickle.dump(lottery_list, open( "lottery_draw2.p", "wb" ) )
    print("Data saved to file.")


if __name__ == '__main__':
    add_data() # data entry 1
    add_data() # data entry 2
    add_data() # data entry 3

    # opening the pickle file
    lottery_list = pickle.load(open( "lottery_draw2.p", "rb" ))
    searching_date = '08-05-2020'
    for each_plyer in lottery_list:
        if(each_plyer.date == searching_date):
            each_plyer.print_details()

输入与输出

Enter date: 08-05-2020
    Enter number for ball 1: 1
    Enter number for ball 2: 1
    Enter number for ball 3: 1
    Enter number for ball 4: 1
    Enter number for ball 5: 1
    Enter number for ball 6: 1
    Enter bonus ball number: 1
Data saved to file.
Enter date: 07-05-2020
    Enter number for ball 1: 2
    Enter number for ball 2: 2
    Enter number for ball 3: 2
    Enter number for ball 4: 2
    Enter number for ball 5: 2
    Enter number for ball 6: 2
    Enter bonus ball number: 2
Data saved to file.
Enter date: 08-05-2020
    Enter number for ball 1: 7
    Enter number for ball 2: 7
    Enter number for ball 3: 7
    Enter number for ball 4: 7
    Enter number for ball 5: 7
    Enter number for ball 6: 7
    Enter bonus ball number: 7
Data saved to file.
object values:  1 1 1 1 1 1 1
object values:  7 7 7 7 7 7 7

【讨论】:

  • 谢谢您,我已经从您的代码中看到了哪里出错了。感谢您的宝贵时间!
猜你喜欢
  • 2019-11-15
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2014-05-12
  • 2021-09-30
相关资源
最近更新 更多