如何将多行字符串拆分成多行?

2025-02-20 09:24:00
admin
原创
67
摘要:问题描述:我有一个多行字符串,我想对每一行执行一个操作,如下所示:inputString = """Line 1 Line 2 Line 3""" 我想在每一行上进行迭代:for line in inputString: doStuff() ...

问题描述:

我有一个多行字符串,我想对每一行执行一个操作,如下所示:

inputString = """Line 1
Line 2
Line 3"""

我想在每一行上进行迭代:

for line in inputString:
    doStuff()

解决方案 1:

inputString.splitlines()

将为您提供一个包含每个项目的列表,该splitlines()方法旨在将每一行拆分为一个列表元素。

解决方案 2:

inputString.split('
')  # --> ['Line 1', 'Line 2', 'Line 3']

这与上面的相同,但是字符串模块的功能已被弃用,应避免使用:

import string
string.split(inputString, '
')  # --> ['Line 1', 'Line 2', 'Line 3']

或者,如果您希望每行都包含换行序列 (CR,LF,CRLF),请使用splitlines带有True参数的方法:

inputString.splitlines(True)  # --> ['Line 1
', 'Line 2
', 'Line 3']

解决方案 3:

使用inputString.splitlines()


为什么splitlines更好

splitlines正确处理换行符,与 不同split

当使用参数调用时,它还可以选择返回拆分结果中的换行符True,这在某些特定场景中很有用。


为什么不应该使用`split("

")`

split跨操作系统共享文件时使用会产生非常令人困惑的错误。

`
`Python 中的 表示 Unix 换行符(ASCII 十进制代码 10),与运行它的操作系统无关。但是,ASCII 换行符表示依赖于操作系统。

在 Windows 上,`
是两个字符,CRLF(ASCII 十进制代码 13 和 10,

),而在现代 Unix(Mac OS X、Linux、Android)上,它是单个字符LF`。

print即使字符串的行尾与您的平台不匹配,也可以正常工作:

>>> print " a 
 b 
 c "
 a 
 b 
 c

但是,明确地拆分“\n”具有依赖于操作系统的行为:

>>> " a 
 b 
 c ".split("
")
[' a ', ' b 
', ' c ']

即使你使用os.linesep,它也只会根据你所在平台的换行符进行拆分,如果你处理在其他平台上创建的文本或使用裸 ,它将失败`
`:

>>> " a 
 b 
 c ".split(os.linesep)
[' a 
 b ', ' c ']

splitlines解决所有这些问题:

>>> " a 
 b 
 c ".splitlines()
[' a ', ' b ', ' c ']

以文本模式读取文件可以部分缓解换行符表示问题,因为它将 Python 的换行符表示转换`
`为平台的换行符表示。

但是文本模式只存在于 Windows 上。在 Unix 系统上,所有文件都以二进制模式打开,因此`split('
')`在 UNIX 系统中使用 Windows 文件会导致不良行为。在网络中传输文件时也会出现这种情况。

解决方案 4:

在这种特殊情况下可能有点过头了,但另一种选择是使用StringIO创建类似文件的对象

for line in StringIO.StringIO(inputString):
    doStuff()

解决方案 5:

原始帖子要求提供打印某些行(如果它们对某些条件成立)以及以下行的代码。我的实现如下:

text = """1 sfasdf
asdfasdf
2 sfasdf
asdfgadfg
1 asfasdf
sdfasdgf
"""

text = text.splitlines()
rows_to_print = {}

for line in range(len(text)):
    if text[line][0] == '1':
        rows_to_print = rows_to_print | {line, line + 1}

rows_to_print = sorted(list(rows_to_print))

for i in rows_to_print:
    print(text[i])

解决方案 6:

我想补充@1_CR 的回答:他向我介绍了以下技术;如果可用,它将使用 cStringIO(但请注意:cStringIO 和 StringIO并不相同,因为您不能子类化 cStringIO...它是内置的...但对于基本操作,语法将相同,因此您可以这样做):

try:
    import cStringIO
    StringIO = cStringIO
except ImportError:
    import StringIO

for line in StringIO.StringIO(variable_with_multiline_string):
    pass
print line.strip()

解决方案 7:

在 Python3 中使用此代码

from io import StringIO
for sline in sio.readlines():
        print(sline)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3938  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2732  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   72  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   79  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   66  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用