如何将列表的特定值分配给python中的特定对象?

时间:2018-08-14 20:09:16

标签: python python-3.x python-2.7 python-requests

我正在从外部来源获取我文件的header_information,如下所示:

header_information="studentname,branch,collage,place"

之后,我将字符串转换为字符串列表。

headerlist=header_information.split(",")
sid=headerlist[0]
bran=headerlist[1]
coll=headerlist[2]
plc=headerlist[3]

根据我的要求,我必须创建具有指定顺序的另一个列表。 例如:

list1=[coll,plc,sid,bran]

但是一些时间标头会像这样的不同(顺序)字符串。

header_information="collage,branch,studentname,place"
but as per my above code :`sid=headerlist[0]`
it will assign `sid=coll`

but i should always assign expected output is like below   
sid="studentname"
coll="collage"
bran=="branch"
plc="place

请帮助我。

2 个答案:

答案 0 :(得分:0)

您将需要某种区分每个项目的方法,否则此任务几乎是不可能的。您是否知道每个标头参数的所有可能输入?您的代码必须具有某种方式来知道哪个子字符串是哪个子字符串,而无需人工知道哪个名字将是一所大学,哪个名字将是一个学生名。例如,每个学生姓名是否都包含空格?每个分支名称都包含单词branch吗?学生证是数字吗?您必须为每个字段找到一个唯一属性并根据该属性进行分配,或者向外部源投诉并获得一致的标题。

答案 1 :(得分:0)

虽然您没有在问题中提供该信息,但我的水晶球告诉我,您正在尝试读取具有任意顺序的字段的csv文件,并以确定的顺序将其写回。

您可以为此使用csv.DictReadercsv.DictWriter

with open('yourcsvfile.csv') as f:
    cf = csv.DictReader(f)

这将解析标头,并为您提供一个对象,该对象产生命令,每个标头部分都指向一个值-顺序无关紧要,因为您使用标头名称本身来引用值:

    for row in cf:
        print(row['collage'], row['place'], row['studentname'], row['branch'])

这将每次都按照此特定顺序打印数据,而不管源文件中的顺序如何。请注意,您不需要为每个值使用单独的变量,因为通过使用字典,您可以将名称空间保留在row变量中。

您可以按照标头的特定顺序写回文件:

with open('yourcsvfile.csv') as f:
    cf = csv.DictReader(f)
    with open('destination.csv', 'w') as fw:
        cw = csv.DictWriter(fw, ['collage', 'place', 'studentname', 'branch'])
        cw.writeheader()
        cw.writerows(cf)

此代码将以任意顺序读取带有头文件的文件,但以代码中确定的特定顺序写回另一个文件。