繁体   English   中英

轻松访问数据

[英]Easily access data

我之前已经问过这个问题,但是我把问题弄得太复杂了,所以我得到了我无法使用的答案(这是针对uni项目的,所以请不要导入东西)。 因此,我在.txt中有一个像这样的列表:

num_cliene,商店,名称,姓氏,位置

11,2,LISA,ANDERSON,埃武拉

13、2,KAREN,JACKSON,里斯本

4,2,BETTY,白色,Seixal

我需要以一种可以输入客户编号的方式访问此数据,无论该客户名称/位置是什么,我都可以输入一个字符串

def listagerador():
clientesfich=open("clientes.txt", "r") 
listacli = ""
for line in clientesfich:
    listacli+=line

我可以轻松地使其成为一个元组或列表,但是我更喜欢使用字符串(但这是真的吗?)。

因此,总而言之,如何根据给定的信息轻松找到一些信息? 谢谢。

您可以通过以下方式创建dict

def listagerador(fname):
    d = {}
    with open(fname, "r") as clientesfich:
        for line in clientesfich:
            fields = line.rstrip().split()
            d[int(fields[0])] = fields[:1]
    return d

my_data = listagerador("clientes.txt")
client_num = 1
print my_data[client_num]

从文本文件读取此数据后,这似乎是创建class的好时机。 例如

class Client:
    def __init__(self, id_num, store_num, first_name, last_name, location):
        self.id_num = id_num
        self.store_num = store_num
        self.first_name = first_name
        self.last_name = last_name
        self.location = location
    def __repr__(self):
        return '{} {}'.format(self.first_name, self.last_name)

您可以使用从文件中读取的每一行中的任何内容来创建Client的实例

>>> lisa = Client(11, 2, 'Lisa', 'Anderson', 'Evora')
>>> karen = Client(13, 2, 'Karen', 'Jackson', 'Lisbon')
>>> betty = Client(4, 2, 'Betty', 'White', 'Seixal')

如果您有这些Client实例的集合,则可以进行过滤,例如检查商店编号

>>> customers = [lisa, karen, betty]
>>> [client for client in customers if client.store_num == 2]
[Lisa Anderson, Karen Jackson, Betty White]

然后,您可以为该Client的实例创建id_numdict ,例如

>>> ids = dict((client.id_num, client) for client in customers)
>>> ids
{11: Lisa Anderson,
 4: Betty White,
 13: Karen Jackson}

可以进行查找,然后查找有关它们的任何其他信息

>>> ids[4]
Betty White
>>> ids[4].location
'Seixal'

对于简单的东西,编写自己的数据处理例程很好。 一旦开始变得更加复杂,您将通过委派数据库来节省理智。

Python内置了Sqlite3,使用起来非常简单。 首先,我们需要将您的数据填充到数据库中。 只需执行一次:

import sqlite3

# open (or create) the database file
db = sqlite3.connect('data/client_list')
cursor = db.cursor()

# create table
cursor.execute(
    """
    CREATE TABLE clients(
        id INTEGER PRIMARY KEY,
        num INTEGER,
        store_id INTEGER,
        name TEXT,
        surname TEXT,
        location TEXT
    )
    """
)
db.commit()

# load data from csv file
import csv
with open('clientes.txt', newline='') as inf:
    rd = csv.reader(inf, skipinitialspace=True)
    next(rd)    # skip header row
    data = list(rd)

# convert num and store_id from str to int
for row in data:
    row[0] = int(row[0])
    row[1] = int(row[1])

# stuff data into the database
cursor.executemany(
    """
    INSERT INTO clients(num, store_id, name, surname, location)
    VALUES(?, ?, ?, ?, ?)
    """,
    data
)
db.commit()

# make sure all changes get saved!
db.close()

现在我们可以像查询

import sqlite3

db = sqlite3.connect('data/client_list')
cursor = db.cursor()

def get_client_by_num(num):
    cursor.execute(
        """
        SELECT num, store_id, name, surname, location
        FROM clients
        WHERE num=?
        """,
        (num,)    # pass parameters as a tuple
    )
    return cursor.fetchone()

get_client_by_num(11)   # returns (11, 2, 'Lisa', 'Anderson', 'Evora')

这太过分了- 但是现在您的数据已存储在数据库中,您可以轻松地问一些问题,例如“哪个3家商店的顾客最多?” 或“上个月每个商店增加了多少客户?”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM