gpt4 book ai didi

python - 如何在 Python 中读取具有可变多行数据的文件

转载 作者:行者123 更新时间:2023-11-28 22:03:53 25 4
gpt4 key购买 nike

我有一个大约 100Mb 的文件,如下所示:

#meta data 1    
skadjflaskdjfasljdfalskdjfl
sdkfjhasdlkgjhsdlkjghlaskdj
asdhfk
#meta data 2
jflaksdjflaksjdflkjasdlfjas
ldaksjflkdsajlkdfj
#meta data 3
alsdkjflasdjkfglalaskdjf

此文件包含一行元数据,对应于几个仅包含字母数字字符的可变长度数据。将这些数据读入像这样的简单列表的最佳方法是什么:

data = [[#meta data 1, skadjflaskdjfasljdfalskdjflsdkfjhasdlkgjhsdlkjghlaskdjasdhfk],
[#meta data 2, jflaksdjflaksjdflkjasdlfjasldaksjflkdsajlkdfj],
[#meta data 3, alsdkjflasdjkfglalaskdjf]]

我最初的想法是使用read()方法将整个文件读入内存,然后使用正则表达式将数据解析成需要的格式。有更好的pythonic方式吗?所有元数据行都以 octothorpe 开头,所有数据行都是字母数字。谢谢!

最佳答案

itertools.groupby提供了一种将行收集到组中的简单方法:

import itertools

data=[]
with open('data.txt','r') as f:
for key,group in itertools.groupby(f,lambda line: line.startswith('#meta')):
if key:
meta=next(group).strip()
else:
lines=''.join(group).strip()
data.append((meta,lines))
print(data)

产量

[('#meta data 1', 'skadjflaskdjfasljdfalskdjfl\nsdkfjhasdlkgjhsdlkjghlaskdj\nasdhfk'), ('#meta data 2', 'jflaksdjflaksjdflkjasdlfjas\nldaksjflkdsajlkdfj'), ('#meta data 3', 'alsdkjflasdjkfglalaskdjf')]

表达式

itertools.groupby(f,lambda line: line.startswith('#meta'))

返回一个迭代器。它遍历 f 中的行,并在每一行上调用 lambda 函数。当它遇到以 #meta 开头的行时,该函数返回 True,否则返回 False

itertools.groupby 收集所有返回相同值的连续行。

所以以#meta开头的行放在自己的组中,然后所有不以#meta开头的行放在下一个组中,并且等等。

keylambda 函数的返回值。在这种情况下,它将是 TrueFalse

关于python - 如何在 Python 中读取具有可变多行数据的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com