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

2024-04-26 06:15:37 发布

您现在位置: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....

我想把每个“设备名称:”映射到所有子部分,直到下一个“设备名称:”出现

我该怎么做?你知道吗


Tags: and文件csv数据nametest名称field
1条回答
网友
1楼 · 发布于 2024-04-26 06:15:37

我会尝试定义一个字典,把你的设备作为键,把行列表作为值。 假设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这样的键,您可以将get_key定义为get_key = lambda line: line:这是一个函数,当给定line时,它将返回完全相同的line,而不进行任何处理。你知道吗

如果您希望您的键类似于Test2-0002,您可以编写get_key函数来删除Device Name:字符串,或者在':'之后获取该字符串的一部分。。。你知道吗

这是一个相当基本的解决方案,但如果您不介意立即存储文件的行,它应该可以工作。如果这是一个问题,只需使用file.readline()而不是lines列表。你知道吗

稍微高级一点的解决方案可以基于mmap模块:找到Device Name行的位置并存储它们。然后你可以一节一节地读。你知道吗

相关问题 更多 >