首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用CSV控制python脚本

使用CSV控制python脚本
EN

Stack Overflow用户
提问于 2018-06-22 22:57:41
回答 1查看 78关注 0票数 2

我想用csv2中的值控制我的python脚本输出:我选择一个Category和一些类似的参数:csv1或类似于csv的参数

在我的python脚本中,我获得了列表中每个参数的值,如下所示:

A_Names = ("Anton", "Berta", "Charlie")
Ages = ("32","18","23")
Nicknames = ("Agent A", "Agent B", None)
Birthdays = ("03.03.1986", "02.02.2000", "01.01.1995")
IDs = (100, 200, 300)

现在的想法是有一个脚本来组合这些信息,因此csv1的输出将是:

Anton
   A_Name: Anton
   Age: 32
   Nickname: Agent A
   Birthday: 03.03.1986
Berta
   A_Name: Berta
   Age: 18
   Nickname: Agent B
   Birthday: 02.02.2000
Charlie
   A_Name: Charlie
   Age: 23
   Nickname: No Nickname yet
   Birthday: 01.01.1995

csv2的输出将是:

Anton
   Nickname: Agent A
   A_Name: Anton
   ID: 100
Berta
   Nickname: Agent B
   A_Name: Berta
   ID: 200
Charlie
   Nickname: No Nickname yet
   A_Name: Charlie
   ID: 300

当然,它也应该在这样的csv3中一起工作,并且在另一个之后的输出也应该是相同的。

所以第一个想法就是这样编码我的输出:

#let's assume i got the columns from the csv in lists like that:
Categories = ("Agents", "Agents")
Parameter1 = ("A_Name", "Nickname")
Parameter2 = ("Age", "A_Name")
Parameter3 = ("Nickname", "ID")
Parameter4 = ("Birthday")

#then the most unflexible code would look like that:

def Show_Values():
    for n in range (0,len(A_Names)):
        print A_Names[n]
        print "  %s: %s" % (Parameter1[0], A_Names[n])
        print "  %s: %s" % (Parameter2[0], Ages[n])
        print "  %s: %s" % (Parameter3[0], Nicknames[n])
        print "  %s: %s" % (Parameter4[0], Birthdays[n])

    for n in range (0,len(A_Names)):
        print A_Names[n]
        print "  %s: %s" % (Parameter1[1], Nicknames[n])
        print "  %s: %s" % (Parameter2[1], A_Names[n])
        print "  %s: %s" % (Parameter3[1], IDs[n])

Show_Values()

所以这是非常愚蠢的代码,我一遍又一遍地重复我自己,总是需要为第二个%s添加正确的值。我现在的问题是,如何创建一个更智能、更简短的代码,它知道A_Name是A_Names的第一个元素。并且他应该添加"%s%s“%(参数,值),以自动获得我通过csv查找的参数数量。我想我需要这行的长度,所以csv中的另外两个列表:

Row0 = (Agents, A_Name, Age, Nickname, Birthday)
Row1 = (Agents, Nickname, A_Name, ID)
len(Row0)-1
len(Row1)-1

编辑:

好的,到目前为止,谢谢你,这是我的新方法,只从csv读取行:

import csv

with open("TableAgentsComma.csv", "rb") as file:
    reader = csv.reader(file, delimiter=",")
    inputHeader = next(reader)
    rows=[r for r in reader]


A_Names = ["Anton", "Berta", "Charlie"]
Ages = ["32","18","23"]
Nicknames = ["Agent A", "Agent B", None]
Birthdays = ["03.03.1986", "02.02.2000", "01.01.1995"]
IDs = [100, 200, 300]

def Show_Values():
    for n in range (0, len(A_Names)):
        print A_Names[n]
        print "  %s: %s" % (rows[0][1], A_Names[n])
        print "  %s: %s" % (rows[0][2], Ages[n])
        print "  %s: %s" % (rows[0][3], Nicknames[n])
        print "  %s: %s" % (rows[0][4], Birthdays[n])
    for n in range (0, len(A_Names)):
        print A_Names[n]
        print "  %s: %s" % (rows[1][1], Nicknames[n])
        print "  %s: %s" % (rows[1][2], A_Names[n])
        print "  %s: %s" % (rows[1][3], IDs[n])

Show_Values()

但当然,它仍然是一个不灵活的脚本,我希望它响应csv,并根据行数和其中的参数生成输出。另外,我需要找出脚本如何知道参数"ID“是在列表中找到的ID等。

csv文件:

Category,Parameter1,Parameter2,Parameter3,Parameter4,Parameter5,
Agents,A_Name,Age,Nickname,Birthday,,
Agents,Nickname,A_Name,ID,,,
Agents,A_Name,Age,,,,
Agents,ID,,,,,
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-23 01:32:09

如果将数据存储为字典,则可以根据csv文件中的名称查找键:

data = {
    "A_Names" : ["Anton", "Berta", "Charlie"],
    "Ages" : ["32","18","23"],
    "Nicknames":  ["Agent A", "Agent B", None],
    "Birthdays": ["03.03.1986", "02.02.2000", "01.01.1995"],
    "IDs": [100, 200, 300]
}

def Show_Values():
    for row in rows:
        for n in range (0, len(data["A_Names"])):
            print data["A_Names"][n]
            for header in row:
                if header == "Agents" or header == "": # This field doesn't match any thing in the data.
                    continue
                header = header.strip()
                header += "s"
                print "  %s: %s" % (header, data[header][n]) 

由于数据现在位于dict中,因此我们可以根据从文件中获得的参数来查找该值。我可能应该叫它“参数”而不是“头”。

Show_Values()

输出:

Anton
  A_Names: Anton
  Ages: 32
  Nicknames: Agent A
  Birthdays: 03.03.1986
Berta
  A_Names: Berta
  Ages: 18
  Nicknames: Agent B
  Birthdays: 02.02.2000
Charlie
  A_Names: Charlie
  Ages: 23
  Nicknames: None
  Birthdays: 01.01.1995

然后从.csv中的第二行开始

Anton
  Nicknames: Agent A
  A_Names: Anton
  IDs: 100
Berta
  Nicknames: Agent B
  A_Names: Berta
  IDs: 200
Charlie
  Nicknames: None
  A_Names: Charlie
  IDs: 300
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50990679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档