python - 将 CSV 文件中的数据存储到数组中?

标签 python csv

如果示例下面的列表存储在 csv 文件中,则每一行都存储在数组中吗?

import csv
import os

DIR = "C:/Users/Administrator/Desktop/key_list.csv"

def Customer_List(csv):
    customer = open(DIR)
    for line in customer:
        row = []
        (row['MEM_ID'],
         row['MEM_SQ'],
         row['X_AUTH_USER'],
         row['X_AUTH_KEY'],
         row['X_STORAGE_URL'])=line.split(",")

        if csv == row['MEM_ID']:
            customer.close()
            return(row)
        else:
            print ("Not search for ID")
            return([])
query = input("Input the your email id: ")
result = Customer_List(query)

此示例警报错误代码.. 为什么..? 另外更新此代码和错误

Input the your email id: sdfsdf@naver.com
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\PyDev\Pydev\Day4\uCloudStorage.py", line 32, in <module>
    result = Customer_List(query)
  File "C:\Users\Administrator\Desktop\PyDev\Pydev\Day4\uCloudStorage.py", line 20, in Customer_List
    row['X_STORAGE_URL'])=line.split(",")
ValueError: too many values to unpack (expected 5)

为了显示 CSV 中的内容,这里有一些简单的代码和结果:

DIR = "C:/Users/Administrator/Desktop/key_list.csv"

def Customer_List():
    customer = open(DIR)
    for line in customer:
        print (line)

结果:

MEM_ID, MEM_SQ, X_AUTH_USER, X_AUTH_KEY, X_STORAGE_URL
kimdm98@gmail.com, M100009, M100009:M100009, wreQew3u, AUTH_xxxxxx-xxxxx
minsejisuk@paran.com, M100022, M100022:M100022, PEm6tREx, AUTH_xxxxx-xxxxx
sdfsdf@naver.com, M100034, M100034:M100034, 3tAzEf3u, AUTH_xxxx-xxxxx

================================================== ================================ 我编辑了这个脚本......这是最佳实践吗?

DIR = "C:/Users/Administrator/Desktop/key_list.csv"
DATA = csv.reader(open(DIR,"r"))

ID = input("Input the Customer EMAIL ID: ")
def cList(value):
    for row in DATA:
        MEM_ID = row[0]
        MEM_SQ = row[1]
        X_AUTH_USER = row[2]
        X_AUTH_KEY = row[3]
        X_STORAGE_URL = row[4]
        ACCESSKEY = row[5]
        ACCESSKEYID1 = row[6]
        SECRETKEY1 = row[7]
        ACCESSKEYID2 = row[8]
        SECRETKEY2 = row[9]
        if MEM_ID == value:
            print(".EMAIL ID     :" + MEM_ID)
            print(".MID          :" + MEM_SQ)
            print(".PASSWORD     :" + X_AUTH_KEY)
            print(".AUTH_ACCOUNT :" + X_STORAGE_URL)
            print(".API KEY      :" + ACCESSKEY)

cList(ID)
print ("============================")
print ("1. Upload / Download Error")
print ("2. Permission Error")
print ("3. 4xx Error")
print ("4. etc... Error")
print ("============================")

结果

Input the Customer EMAIL ID: kiyoung.jung@kt.com
.EMAIL ID     :kiyoung.jung@kt.com
.MID          :xxxxxx
.PASSWORD     :xxxxxx
.AUTH_ACCOUNT :xxxxxx-d50a-xxxx-xxxbc05-6267d5ff6712
.API KEY      :xxxxxxxx
============================
1. Upload / Download Error
2. Permission Error
3. 4xx Error
4. etc... Error
============================

最佳答案

如果您的输入数据的格式与您在问题末尾添加的格式相同,那么您的方法可以像这样工作:

import csv

DIR = "C:/Users/Administrator/Desktop/key_list.csv"

def Customer_List(email_id):
    with open(DIR, newline='') as f:  # open assuming Python 3.x
        csvreader = csv.reader(f, skipinitialspace=True)
        for fields in csvreader:
            row = {}  # initialize to an empty dictionary
            (row['MEM_ID'],
             row['MEM_SQ'],
             row['X_AUTH_USER'],
             row['X_AUTH_KEY'],
             row['X_STORAGE_URL']) = fields

            if row['MEM_ID'] == email_id:
                return [row['MEM_ID'],
                        row['MEM_SQ'],
                        row['X_AUTH_USER'],
                        row['X_AUTH_KEY'],
                        row['X_STORAGE_URL']]

        else:
            print("ID not found")
            return []

match = Customer_List('minsejisuk@paran.com')
if match:
    print('found! {}'.format(match))

但是,您可以通过使用 csv.DictReader 读取文件来稍微简化事情,该文件将自动读取标题行以获取字段名,然后使用它们作为读取的每行的键返回一个字典:

def Customer_List(email_id):
    with open(DIR, newline='') as f:  # open assuming Python 3.x
        csvreader = csv.DictReader(f, skipinitialspace=True)
        for row in csvreader:
            if row['MEM_ID'] == email_id:
                return [row['MEM_ID'],
                        row['MEM_SQ'],
                        row['X_AUTH_USER'],
                        row['X_AUTH_KEY'],
                        row['X_STORAGE_URL']]
        else:
            print("ID not found")
            return []

关于python - 将 CSV 文件中的数据存储到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34645915/

相关文章:

python - 将代码推送到 Jenkins 时随机测试失败

python - MYSQL - 返回匹配的模式

php - 从 CSV 给出错误的数组关联以导入到 mysql

python - 我如何区分和修补/merge 字符串而不是文件?

python - 如何检查if语句当前时间是否大于时间

python-3.x - 如何在没有分隔符的情况下从 CSV 创建 Pandas 数据框(在 python 中)

javascript - 如何使用 Javascript 或 Java 获取 CSV 动态更改的实际数字

php - 如何跳过第一行并从 PHP 中的 csv 读取最多五行

python - pyqt中的异步模式?或者更干净的后台调用模式?

python - 在python中加载1GB大json文件时如何解决内存错误?