我一直在研究一个vanilla Python代码来分离csv中的数据。我的目标是使用多种策略重新创建此代码,以便更好地理解Python。稍后将对此代码进行改进。我的代码有效,但有一些我不明白的事情。这是:
with open('C:\My Super Secret Path\primary_debates_cleaned.csv') as primaryData:
headers = primaryData.readline().strip('\n').split(',')
flag = 0
for lines in primaryData:
sepInit = lines.strip('\n').split('"')
if flag == 1:
sep1 = [item for item in sepInit[0].split(',') if item is not '']
sep2 = sepInit[1]
sep3 = [item for item in sepInit[2].split(',') if item is not '']
#sep4 = sepInit[3]
sep4 = sepInit[-2]
#sep5 = sepInit[4].strip(',')
sep5 = sepInit[-1].strip(',')
#sepFinal = [sep1[0], sep1[1], sep2, sep3[0], sep3[1], sep4, sep5]
sepFinal = [sep1[0], sep1[1], sep2, sep3[0:1], sep3[1:2], sep4, sep5]
if flag == 0:
sepFinal = headers
flag = 1
print sepFinal
我的第一个问题涉及此代码段,特别是索引:
#sep4 = sepInit[3]
sep4 = sepInit[-2]
#sep5 = sepInit[4].strip(',')
sep5 = sepInit[-1].strip(',')
评论的部分是我想要做的,未注释的部分是有效的。似乎我必须反转索引才能获取正确的信息。 “类型”似乎是相同的,都是列表。是否有一些我在开始时做错了,或者我在这里错过了一些简单的东西?
我的下一个问题与下面的代码段相似:
#sepFinal = [sep1[0], sep1[1], sep2, sep3[0], sep3[1], sep4, sep5]
sepFinal = [sep1[0], sep1[1], sep2, sep3[0:1], sep3[1:2], sep4, sep5]
为什么我只能使用0和1从sep1
获取所需信息,但我不能对sep3
执行相同操作?
最后,在打印列表sepFinal
时,sep4
和sep5
的元素显示为列表。其他所有内容只是列表sepFinal
的一个元素,但sep4
和sep5
是列表中的列表。如果需要澄清,请告诉我。那么,为什么sep4
和sep5
在我的列表中显示为列表?
EDIT0:没有输入。我将进入PowerShell,并键入python mySecretProgramName.py
来运行它。 print sepFinal
显示以下内容,带括号:
>>> [element 1, element 2, element 3, [element 4], [element 5]]
从一开始,我希望它是:
>>> [element 1, element 2, element 3, element 4, element 5]
EDIT1:由于数据分割不当,需要负索引。 sepInit
的长度发生了变化,因此索引不正确。感谢@martineau指出这种可能性。我通过简单地将print(len(sepInit))
放在循环中sepInit
来测试了这一点。
否定索引信息:someList[-1]
抓取列表中的最后一项,someList[-2]
抓取列表中倒数第二项等等。
EDIT2:这涉及sep3[0:1]
等。这基本上是列表的一部分,其中sep3[0:1]
将返回位置0和1之间的任何元素。