gpt4 book ai didi

Python:如何根据标题词的出现将文件分成 block

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:48 29 4
gpt4 key购买 nike

有一个文件:

NAME,ANDREW,AGE 20, BD 1979
NAT ENGLISH
OCC LONDON
INC 200$
NAME,SVEN,AGE 20, BD 1979
NAT SWEDISH
OCC FALUN
INC 100$
NAME,HANS,AGE 30, BD 1988
NAT GERMAN
OCC BERLIN
NOTE, HANDSOME ONE
NAME,LUDOVIC,AGE 40, BD 1955
NAT FRENCH
OCC BORDEAUX
INC 5000$
INTERESTS, FISHING
NAME,PETER
NAT DUTCH
SUMMARY,AGE:20,BD:1979,NAT:DUTCH,OCC:TILBURG,INC:1000$

我尝试将它分成 block ,其中每个 block 都以“NAME”字样开头,并且包含未知行数直到下一个“NAME”,当然最后一个 block 在文件末尾结束。例如,我想存储在列表列表中的 block ,至少这是我的第一次尝试。一般来说,我需要稍后单独迭代每个 block ,因此存储方法是为以后的目标服务的。

我迄今为止的代码如下:

start = 'NAME,'
end = 'NAME,'
flag_append = False
my_list = []

for line in open('sample_csv.csv').readlines():
if line.startswith(start):
data = line[len(start):]
flag_append = True
my_list.append(data)
elif flag_append:
temp = []
temp.append(line)
my_list.append(temp)
elif line.startswith(end):
flag_append = False
break

print my_list

但这还不是我想要的。

我想要的输出是:

[['ANDREW,AGE 20, BD 1979\n','NAT ENGLISH\n','OCC LONDON\n', 'INC 200$\n'],['SVEN,AGE 20, BD 1979\n','NAT SWEDISH\n','OCC FALUN\n','INC 100$\n'],['HANS,AGE 30, BD 1988\n', 'NAT GERMAN\n', 'OCC BERLIN\n', 'NOTE, HANDSOME ONE\n'], ['LUDOVIC,AGE 40, BD 1955\n', 'NAT FRENCH\n', 'OCC BORDEAUX\n', 'INC 5000$\n', 'INTERESTS, FISHING\n'], ['PETER\n', 'NAT DUTCH\n', 'SUMMARY,AGE:20,BD:1979,NAT:DUTCH,OCC:TILBURG,INC:1000$']]

或示意性地:

[[chunk],[chunk],[chunk],[chunk]]

提前致谢。

编辑 26.10.2012

感谢大家提供非常有帮助的答案。我选择了 Kzhi 的答案,因为他的解决方案没有省略 splitting 关键字。抱歉,我没有在我的问题中提到这个要求,你的答案依赖于我笨拙的代码,结果省略了关键字。干杯!

最佳答案

我认为这将是一个优雅的解决方案:

token = 'foo'
chunks = []
current_chunk = []

for line in open('sample_csv.csv'):
if line.startswith(token) and current_chunk:
# if line starts with token and the current chunk is not empty
chunks.append(current_chunk[:]) # add not empty chunk to chunks
current_chunk = [] # make current chunk blank
# just append a line to the current chunk on each iteration
current_chunk.append(line)

chunks.append(current_chunk) # append the last chunk outside the loop

所以有内容的文件:

foo
asdf
asdf
foo
foo
asdf
asdf
fooo

你会得到这样的结果:

[
['foo\n', 'asdf\n', 'asdf\n'],
['foo\n'],
['foo\n', 'asdf\n', 'asdf\n'],
['fooo\n']
]

关于Python:如何根据标题词的出现将文件分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575702/

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