【问题标题】:How do I read the first line of a string? [duplicate]如何读取字符串的第一行? [复制]
【发布时间】:2012-08-03 17:14:24
【问题描述】:
my_string = """This is my first line,
this is my second line, and...

...this is my fourth line!"""

如何将第一行 (This is my first line,) 存储到单独的字符串中?我试图从另一个类似的问题中使用.readline(),但是我收到了这个错误:

AttributeError: 'str' object has no attribute 'readline'

【问题讨论】:

  • 这根本不是重复的。

标签: python string


【解决方案1】:

使用str.partition() 在换行符上拆分字符串,并从结果中获取第一项:

my_string.partition('\n')[0]

如果您只需要在单个位置拆分字符串,这是最有效的方法。你也可以使用str.split()

my_string.split('\n', 1)[0]

然后你需要告诉方法只在第一个换行符上拆分一次,因为我们丢弃了其余的。

或者你可以使用.splitlines() method:

my_string.splitlines()[0]

但这必须为输入字符串中的每个换行符创建单独的字符串,因此效率不高。

【讨论】:

  • 这句话不太明白,能解释一下吗? I instructed ... rest
  • @Lei 释义:因为我们只对第一个元素感兴趣并丢弃其余元素,所以我使用了两个参数,因此 Python 将字符串分成两部分。多次拆分是没有意义的。
  • split('\n',1) 方法在这种情况下使用更少的内存吗?
  • @Phineas str.split() 创建新的字符串对象(以及保存它们的列表对象),.split("\n", 1) 仅创建两个新的字符串对象。然而,这两个对象复制了第一个对象的字符串内容,加上每个对象的开销(引用计数、长度、其他簿记数据),其大小相当小,因此不会产生 太多区别。如果输入字符串的长度为 1000 个字符,并且您在换行符处拆分,则新的附加字符串对象之间将有近 1000 个字符(减去换行符,但加上每个对象的开销)。
  • @Phineas:如果您在处理 lot 的字符串数据时遇到内存问题,也许您需要考虑不要同时将尽可能多的文本加载到代码中,而是而不是担心str.splitlines()str.split("\n", 1) 将使用多少内存。
【解决方案2】:

你可以使用split():

my_string = """This is my first line,
this is my second line, and...

...this is my fourth line!"""

lines = my_string.split('\n')

【讨论】:

    【解决方案3】:

    readline 与流结合使用。如果你坚持使用 readline,你可以使用 StringIO:

    from StringIO import StringIO
    
    sio = StringIO(my_string)
    for sline in sio.readlines():
        print sline
    

    我愿意

     for line in my_string.split('\n'):
            print line
    

    或者做

    import re
    for line in re.split('\n', my_string):
        print line
    

    【讨论】:

    • @e-info128 macOS 自 2001 年以来一直没有使用 '\r',它使用的是 '\n'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2015-12-31
    • 2018-08-05
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多