簡體   English   中英

從 csv 導入數據,其中每個列表被分成多行

[英]Importing data from csv where each list is split into many rows

嗨,所以我有點被這個問題困住了。 我有一個 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,但都將每一行都視為自己的觀察。

提前致謝!

編輯:數字實際上由一個空格或雙空格分隔。

以下應該工作:

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

編輯:更新解析以將值轉換為int s

這是你想要的:

>>> 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 )。 然后分成由][划分的塊。 最后通過空格字符分割每個塊並將它們轉換為整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM