Python .splitlines()将文本分段为单独的变量

时间:2016-02-18 21:22:36

标签: python-2.7

我已阅读本网站上的其他主题,但还没有完全掌握如何完成我想做的事情。我想找到像.splitlines()这样的方法,将多行字符串中的前两行文本分配到两个单独的变量中。然后将字符串中的其余文本组合在另一个变量中。

目的是使用三个变量作为单独列的数据,使用一致的数据集写入.csv。

Title of a string       
Description of the string        

There are multiple lines under the second line in the string! 
There are multiple lines under the second line in the string!
There are multiple lines under the second line in the string!

任何有关pythonic方法的指导都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想把一个大字符串分成行

lines = input_string.splitlines()

之后,您希望将第一行和第二行分配给变量,将其余行分配给另一个变量

title = lines[0]
description = lines[1]
rest = lines[2:]

如果你想要休息'要成为一个字符串,您可以通过使用换行符加入它来实现。

rest = '\n'.join(lines[2:])

另一个非常快的选择是:

lines = input_string.split('\n', maxsplit=2)  # This only separates the first to lines
title = lines[0]
description = lines[1]
rest = lines[2]

答案 1 :(得分:1)

使用islice

除了正常的列表切片之外,您还可以使用islice(),这在生成较大列表的切片时效果更佳。

代码看起来像这样:

from itertools import islice

with open('input.txt') as f:
    data = f.readlines()


first_line_list = list(islice(data, 0, 1))
second_line_list = list(islice(data, 1, 2))
other_lines_list = list(islice(data, 2, None))

first_line_string = "".join(first_line_list)
second_line_string = "".join(second_line_list)
other_lines_string = "".join(other_lines_list)

但是,您应该记住,您从中读取的数据源足够长。如果不是,则在使用正常列表切片时使用StopIterationislice()时会出现IndexError错误。

使用正则表达式

OP在下面的评论中还要求提供无列表方法。 因为从文件中读取数据会导致字符串并通过字符串处理稍后或直接写入我建议使用正则表达式的读取行列表。

我无法说清单/字符串处理和正则表达式操作之间的性能比较。但是,这应该做的工作:

import re

regex = '(?P<first>.+)(\n)(?P<second>.+)([\n]{2})(?P<rest>.+[\n])'

preg = re.compile(regex)

with open('input.txt') as f:
    data = f.read()

match = re.search(regex, data, re.MULTILINE | re.DOTALL)

first_line = match.group('first')
second_line = match.group('second')
rest_lines = match.group('rest')