从 csv 导入数据,其中每个列表分为多行

我有一个 csv 文件,它看起来像这样:


[12  34 45 22 3 5

 34 33 2 67 5 55

 2 90 88 12 34]

[245  4 13]

[33 90 50 22 90 1

 23 44 876  10 7] ...

等等。换句话说,csv 文件被分成由单个空格或双空格分隔的数字列表,如果数字列表超过一定数量的值(在我的例子中为 14),它会在下一行继续该列表,直到号码列表结束。数字列表不以逗号分隔,但每个新列表均以方括号开头和结尾。


我想将 csv 文件导入到列表列表中,如下所示:


[[12, 34, 45, 22, 3, 5, 34, 33, 2, 67, 5, 55, 2, 90, 88, 12, 34], 

[245, 4, 13], 

[33, 90, 50, 22, 90, 1, 23, 44, 876, 10, 7], 

[...]]

我怎样才能做到这一点?我尝试过 np.loadtxt 和 pandas,但两者都将每一行视为自己的观察结果。


提前致谢!


编辑:数字实际上是用一个空格或两个空格分隔的。


大话西游666
浏览 138回答 3
3回答

慕少森

以下应该有效:with open('myfile.csv') as f:    t=f.read()t=t.replace('\n', '').replace('  ', ' ').replace(' ', ',')l=t.split(']')l.pop()l=[i.replace('[', '') for i in l] result=[[int(s) for s in k.split(',')] for k in l]print(result)输出:[[12, 34, 45, 22, 3, 5, 34, 33, 2, 67, 5, 55, 2, 90, 88, 12, 34], [245, 4, 13], [33, 90, 50, 22, 90, 1, 23, 44, 876, 10, 7]]

天涯尽头无女友

您可以使用内置csv库,然后只需拆分每行的值:import csvwith open('test.csv', 'r') as testCsvFile:    testCsv = csv.reader(testCsvFile)    listOfLists = []    for row in testCsv:        listOfLists.append([int(val) for val in row[0][1:-1].split(' ')])    print(listOfLists)# Output# [[12, 34, 45, 22, 3, 5, 34, 33, 2, 67, 5, 55, 2, 90, 88, 12, 34], [245, 4, 13], [33, 90, 50, 22, 90, 1, 23, 44, 876, 10, 7]]编辑:更新了解析以将值转换为ints

慕雪6442864

这是你想要的:>>> with open("file.txt", "r") as f:...     content = f.read().replace("\n", "")... >>> content = [[int(i) for i in c.split(" ")] for c in content[1:-1].split("][")]>>> content[[12, 34, 45, 22, 3, 5, 34, 33, 2, 67, 5, 55, 2, 90, 88, 12, 34], [245, 4, 13], [33, 90, 50, 22, 90, 1, 23, 44, 876, 10, 7]]首先将整个文件作为一个字符串读取,去掉第一个和最后一个字符 ([和]) 以及换行符 ( \n)。然后分割成块除以][。最后用空格字符分割每个块并将它们转换为整数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python