[英]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.