我导入的CSV文件基本上是一个包含5个标题的表和包含5个元素的数据集。
使用此代码,我将该数据转换为具有5位信息的个人列表(列表中的列表):
import csv
readFile = open('Category.csv','r')
categoryList = []
for row in csv.reader(readFile):
categoryList.append(row)
readFile.close()
现在我有一个列表[[a,b,c,d,e],[a,b,c,d,e],[a,b,c,d,e]...]
但是,整个列表中每个列表中的元素2(categoryList[i][2]
)或“c
”是由可变长度的分隔符(“:
”)分隔的字符串。如何将元素2转换为列表本身?基本上看起来像这样:
[[a,b,[1,2,3...],d,e][a,b,[1,2,3...],d,e][a,b,[1,2,3...],d,e]...]
我考虑循环遍历每个列表元素并查找元素2,然后使用.split(':')
命令将这些值分开。
答案 0 :(得分:1)
您建议的解决方案是可行的。阅读文件后,您无需执行此操作。你可以在把它当作输入的时候做到这一点。
profileChangeRequest
编辑:我想你知道分割功能的目的。所以我会解释for row in csv.reader(readFile):
row[2] = row[2].split(":") # Split element 2 of each row before appending
categoryList.append(row)
。
您有row[2]
这样的数据,这意味着每个[[a,b,c,d,e],[a,b,c,d,e],[a,b,c,d,e]...]
都像row
,[a,b,c,d,e]
,[a,b,c,d,e]
,所以每一行[2]对应于[a,b,c,d,e]
。使用这种方式,您可以在追加之前更改所有c
并将其转换为c
。
答案 1 :(得分:0)
您可以在每一行上使用列表理解,并将包含':'
的项目拆分为新的子列表:
for row in csv.reader(readFile):
new_row = [i.split(':') if ':' in i else i for i in row]
categoryList.append(new_row)
如果您在':'
上需要拆分的行中还有其他项目,则此方法有效。
否则,如果您只有一个包含':'
的项目,则可以直接拆分索引:
for row in csv.reader(readFile):
row[2] = row[2].split(':')
categoryList.append(row)
答案 2 :(得分:0)
关于你的结构并不是很清楚,但是如果c是一个字符串,请分开:然后尝试
列表(c.split(':'))
让我知道它是否解决了您的问题
答案 3 :(得分:0)
假设你有这样一行:
row = ["foo", "bar", "1:2:3:4:5", "baz"]
要将项目[2]
转换为子列表,您可以使用
row[2] = row[2].split(":") # elements can be assigned to, yawn.
现在行是['foo', 'bar', ['1', '2', '3', '4', '5'], 'baz']
将移植拆分项目移至"顶层"该行,你可以使用
row[2:3] = row[2].split(":") # slices can be assigned to, too, yay!
现在行是['foo', 'bar', '1', '2', '3', '4', '5', 'baz']
这当然会跳过对行数据的任何防御性检查(可以将它分开吗?),这是一个真正强大的应用程序应该具有的。