我正在从外部来源获取我文件的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
请帮助我。
答案 0 :(得分:0)
您将需要某种区分每个项目的方法,否则此任务几乎是不可能的。您是否知道每个标头参数的所有可能输入?您的代码必须具有某种方式来知道哪个子字符串是哪个子字符串,而无需人工知道哪个名字将是一所大学,哪个名字将是一个学生名。例如,每个学生姓名是否都包含空格?每个分支名称都包含单词branch吗?学生证是数字吗?您必须为每个字段找到一个唯一属性并根据该属性进行分配,或者向外部源投诉并获得一致的标题。
答案 1 :(得分:0)
虽然您没有在问题中提供该信息,但我的水晶球告诉我,您正在尝试读取具有任意顺序的字段的csv文件,并以确定的顺序将其写回。
您可以为此使用csv.DictReader
和csv.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)
此代码将以任意顺序读取带有头文件的文件,但以代码中确定的特定顺序写回另一个文件。