【问题标题】:splitting a string twice将字符串拆分两次
【发布时间】:2021-01-08 15:03:44
【问题描述】:

我有一个非常大的文件,我想将每一行拆分两次并返回。但是我只能得到第一个结果,第二个超出范围

def clean_text(doc):
    rows = doc.split('\n')
    for row in rows:
        row = row.split('|')
        first_name = row[0]
        last_name = row[1] <---- out of bounds
        print(first_name, last_name)

有更好的解决方案吗?

【问题讨论】:

  • 如果row[1] 出现越界错误,则意味着row.split('|') 返回了一个长度=1 的列表,这意味着该行中没有管道|
  • 可以first_name, last_name = row.split('|'),但这并不能解决越界错误。也许在拆分前添加支票:if '|' in row:。您也可以使用doc.splitlines() 而不是在\n 上拆分。见this postthis post
  • 你也可以捕获异常,或者检查返回的长度..
  • 您也可以尝试从源头解决问题,并确保它始终创建带有名字和姓氏的文件。
  • 您需要添加对从拆分返回的条目数的检查。文本文件中通常存在一些与预期模式不太相符的特殊情况。

标签: python string


【解决方案1】:

完成此操作后,检查生成的文件并查看所有没有姓氏的文件有什么特别之处。从那时起,您可以决定如何处理这些情况。

如果您的输入数据(文档)不在您的控制范围内,那么如果错误则拒绝或通过捕获异常来处理它。 如果没有为你的方法指定要求和前提条件,你就要求最好的方法是没有意义的。

def clean_text(doc):
    rows = doc.splitlines()
    for row in rows:
        row = row.split('|')
        first_name = row[0]
        try:
          last_name = row[1]
        except IndexError:
          last_name = ''
        print(first_name, last_name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2022-01-25
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多