为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2023-09-05 15:47:30
我有一个 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,但两者都将每一行视为自己的观察结果。提前致谢!编辑:数字实际上是用一个空格或两个空格分隔的。
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

以下应该有效:


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]]



查看完整回答
反对 回复 2023-09-05
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您可以使用内置csv库,然后只需拆分每行的值:


import csv


with 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


查看完整回答
反对 回复 2023-09-05
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

这是你想要的:


>>> 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)。然后分割成块除以][。最后用空格字符分割每个块并将它们转换为整数。


查看完整回答
反对 回复 2023-09-05
  • 3 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信