从.DAT文件中提取具有未定义大小的多个数组

2024-09-28 22:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个设备,它在一个.DAT文件中存储三个数据集,它们总是有相同的标题和列数,但是行的数目不同。 它们是(nx4),(mx4),(lx3)。 我需要把这三个数据集提取成单独的数组进行绘图。 我一直想用numpy.genfromtxt以及numpy.loadtxt文件,但我可以让它们为这种格式工作的唯一方法是手动定义每个数据集开始的行。 由于我经常需要处理这种格式,所以我一直在尝试将其自动化。 如果有人能提出一个可行的方法,我将不胜感激。我附上了一个范例文件。在

example file


Tags: 文件数据方法numpy绘图标题格式数组
1条回答
网友
1楼 · 发布于 2024-09-28 22:41:41

只是一个肮脏的解决方案。在您的文件大小下,您可能会遇到性能问题。如果您知道mn和{},则用相应的长度初始化输出向量。在

策略如下:将整个文件加载到一个变量中。逐行读取变量。一旦你发现了一个关键字,升起一个标志,表明你在特定的块中。在下一行中,读出该行中正确的变量。在

isblock1 = isblock2 = isblock3 = False
fout = [] # construct also all the other variables that you want to collect.
with open(file, 'r') as file:
    lines = file.readlines() #read all the lines
for line in lines:
    if isblock1:
        (f, psd, ipj, itj) = line.split()
        fout.append(f) #do this also with the other variables
    if isblock2:
        (t1, p1, p2, p12) = line.split()
    if isblock3:
        (t2, v1, v2) = line.split()
    if 'Frequency' is in line:
        isblock1 = True
        isblock2 = isblock3 = False
    if 'Phasor' is in line:
        isblock2 = True
        isblock1 = isblock3 = False
    if 'Voltage' is in line:
        isblock3 = True
        isblock1 = isblock2 = False

希望有帮助。在

相关问题 更多 >