簡體   English   中英

如何將csv文件的行映射到python中的特定行

[英]how to map a row of a csv file to specific rows in python

我有一個奇怪的看着csv文件。 它具有子節,每個子節都有csv格式的數據。

數據例如:

Device Name: Test-0001

Sub section 1
header 1, header 2, header 3,header 4,.......header n
field 1, field 2, field 3, field 4, .......field n

Sub section 2
header 1, header 2, header 3,header 4,.......header n
field 1, field 2, field 3, field 4, .......field n

.....

Sub section n

header 1, header 2, header 3,header 4,.......header n
field 1, field 2, field 3, field 4, .......field n

Device Name: Test2-0002
and same format afterwards....

我希望將每個“設備名稱:”映射到所有子節,直到下一個“設備名稱:”出現

我該怎么做?

我會嘗試定義一個字典,將您的設備用作鍵,並將行列表作為值。 假設這些lines是文件行的列表:

with open(your_file_name, "r") as f:
    lines = f.readlines()

devices = {}
key = None
for line in lines:
    if not line.strip():
        continue
    if line.startswith("Device Name"):
        key = get_key(line)
        devices[key] = []
    else:
        devices[key].append(line)

其中get_key是您要定義的函數,該函數會將Device Name: Test2-0002類的行轉換為Device Name: Test2-0002

例如,如果您想要像Device Name: Test2-0002這樣的鍵,則可以將get_key定義為get_key = lambda line: line :這是一個函數,當給定line將返回完全相同的line而無需任何處理。

如果希望您的密鑰類似於Test2-0002 ,則可以編寫get_key函數以刪除Device Name:字符串,或將字符串的一部分放在':'

這是一個非常基本的解決方案,但如果您不介意一次存儲文件行,則應該可以使用。 如果這是一個問題,只需使用file.readline()而不是lines列表。

稍微更高級的解決方案可能基於mmap模塊:找到“ Device Name行的位置並將其存儲。 然后,您可以逐節閱讀。

暫無
暫無

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

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