我有一个文本文件,我想将这个文本文件读入3个不同的数组,array1 array2和array3。第一段放在array1中,第二段放在array2中,依此类推。然后将第4段放在array1 element2中,依此类推,段落用空行分隔。任何想法?
答案 0 :(得分:9)
这是我尝试的基本代码:
f = open('data.txt', 'r')
data = f.read()
array1 = []
array2 = []
array3 = []
splat = data.split("\n\n")
for number, paragraph in enumerate(splat, 1):
if number % 3 == 1:
array1 += [paragraph]
elif number % 3 == 2:
array2 += [paragraph]
elif number % 3 == 0:
array3 += [paragraph]
这应该足以让你入门。如果文件中的段落被两个新行拆分,那么“\ n \ n”应该可以分割它们。
答案 1 :(得分:2)
import itertools as it
def paragraphs(fileobj, separator='\n'):
"""Iterate a fileobject by paragraph"""
## Makes no assumptions about the encoding used in the file
lines = []
for line in fileobj:
if line == separator and lines:
yield ''.join(lines)
lines = []
else:
lines.append(line)
yield ''.join(lines)
paragraph_lists = [[], [], []]
with open('/Users/robdev/Desktop/test.txt') as f:
paras = paragraphs(f)
for para, group in it.izip(paras, it.cycle(paragraph_lists)):
group.append(para)
print paragraph_lists
答案 2 :(得分:1)
因为我想炫耀一下:
with open('data.txt') as f:
f = list(f)
a, b, c = (list(__import__('itertools').islice(f, i, None, 3)) for i in range(3))
答案 3 :(得分:1)
我知道很久以前就问过这个问题但只是提出我的意见,以便在某些时候对其他人有用。 我知道更容易的方法将输入文件拆分成段落分隔符(它可以是\ n或空格或其他任何东西)的段落,你的问题的代码片段如下:
with open("input.txt", "r") as input:
input_ = input.read().split("\n\n") #\n\n denotes there is a blank line in between paragraphs.
执行此命令后,如果您尝试打印input_ [0],它将显示第一段,input_ [1]将显示第二段,依此类推。因此,它将输入文件中存在的所有段落放入List中,每个List元素都包含输入文件中的段落。
答案 4 :(得分:0)
使用切片也可以。
par_separator = "\n\n"
paragraphs = "1\n\n2\n\n3\n\n4\n\n5\n\n6".split(par_separator)
a,b,c = paragraphs[0:len(paragraphs):3], paragraphs[1:len(paragraphs):3],\
paragraphs[2:len(paragraphs):3]
在切片中:[开始索引,结束索引,步骤]
答案 5 :(得分:0)
更优雅的绕过切片的方法:
def grouper(n, iterable, fillvalue=None):
args = [iter(iterable)] * n
return itertools.izip_longest(fillvalue=fillvalue, *args)
for p in grouper(5,[sent.strip() for sent in text.split('\n') if sent !='']):
print p
请确保在最终文本中处理无
答案 6 :(得分:0)
此代码将搜索两点之间的线:
rr = [] #Array for saving lines
for f in file_list:
with open(f, 'rt') as fl:
lines = fl.read()
lines = lines[lines.find('String1'):lines.find('String2')]
rr.append(lines)