【问题标题】:Is there a way to split a line by its order number in Python?有没有办法在 Python 中按订单号拆分一行?
【发布时间】:2021-05-03 23:39:08
【问题描述】:

为什么我无法访问已经拆分的字符串中的特定行号?

    a = "ABCDEFGHIJKLJMNOPRSTCUFSC"
    barcode = "2"
    import textwrap
            prazno = textwrap.fill(a,width=5)
            podeli = prazno.splitlines()

这里的输出是正确的:

print(podeli)
ABCDE
FGHIJ
KLJMN
OPRST
CUFSC

但是,当我想将其中一行(例如 podeli[2])拆分为 3 个字符时,python 会忽略这一点并给出与 podeli[2](第 2 行)的拆分相同的输出。

    if barcode[0] == '1':
        podeli[1] += ' MATA'
    elif barcode[0] == '2':
        podeli[1] += ' MATA'
        for podeli[2] in podeli:
            textwrap.fill(podeli[2], width=3)
            podeli[2].splitlines()
        podeli[2] += ' MATA'

预期的输出是:

ABCDE MATA
FGH MATA
IJ
KLJMN
OPRST
CUFSC

有没有办法按一定的长度和订单号分割线? 谢谢各位!

【问题讨论】:

  • 你想要的确切输出是什么?
  • 您对for podeli[2] in podeli: 的期望是什么?
  • (textwrap.fill(a), width=5)) 顺便说一句,这里的括号不均匀。我也认为它应该是这样的。 prazno = textwrap.fill(a,width=5)
  • 我的预期输出是:ABCDEMATA FGHMATA IJ KLJMN OPRST CUFSC
  • 您的循环正在覆盖podeli[2] 的内容,因为您将其用作循环变量。而且由于您没有将第二个splitlines 的结果存储在任何地方,因此您自然看不到结果。您想要的是将新行插入列表中,这有点棘手。这只是针对固定位置,还是循环执行?

标签: python python-3.x split


【解决方案1】:

您可以通过重建列表来解决您当前的问题,但我担心您有一个更普遍的问题,您没有告诉我们。

    if barcode[0] == '1':
        podeli[1] += ' MATA'
    elif barcode[0] == '2':
        podeli[1] += ' MATA'
        line2 = textwrap.fill(podeli[2], width=3).splitlines()
        podeli = podeli[0:2] + line2 + podeli[3:]
        podeli[2] += ' MATA'

【讨论】:

    【解决方案2】:

    试试这个,它应该将你指定的字符串分割为 3 的宽度:

    n = 3
    [((podeli[2])[i:i+n]) for i in range(0, len(podeli[2]), n)]
    

    【讨论】:

    • textwrap 已经这样做了。您的评论没有解决建立列表的问题。
    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 2020-04-27
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多