【问题标题】:Modify string line by line in Python在Python中逐行修改字符串
【发布时间】:2018-12-28 19:29:30
【问题描述】:

我是 Python 新手,如果问题很简单,我深表歉意。我有一个名为 decShow 的字符串,其中包含以下信息:

 00:00:00,000 -> 94 FB
 00:00:00,100 -> 94 FA
 00:00:00,200 -> 94 F9
 00:00:00,300 -> 94 F8
 00:00:00,400 -> 94 F7
 00:00:00,500 -> 94 F6
 00:00:00,600 -> 94 F5
 00:00:00,700 -> 94 F4
 00:00:00,800 -> 94 F3
 00:00:00,900 -> 94 F2
 00:00:01,000 -> 94 F1
 00:00:01,100 -> 94 20

HH:MM:SS,sss -> Hex Code

我想逐行修改那个字符串,创建另一个这样的字符串

00000000: Hex Code

其中的零是每行分钟、秒和毫秒转换为十六进制毫秒的十六进制值。数学不是问题,问题是循环。尝试使用for line in decShow 后,我没有得到预期的结果。

我怎样才能有效地做到这一点?

编辑:澄清一下。

我在一个字符串中有这个:

 00:00:00,000 -> 94 FB
 00:00:00,100 -> 94 FA
 00:00:00,200 -> 94 F9
 00:00:00,300 -> 94 F8

我想把它变成这样:

00000000: 94 FB
00000064: 94 FA
000000C8: 94 F9
0000012C: 94 F8

我在for line in decShow 下尝试了一个循环,但它似乎只适用于.readlines()

【问题讨论】:

标签: python string loops


【解决方案1】:
>>> import re
>>> tup_lst = [re.split(r' -> |,', l.strip()) for l in decShow.splitlines()]
>>> new_data = '\n'.join([a.replace(':', '')+'%03X: ' % int(b)+c for a,b,c in tup_lst])
>>> print (new_data)

输出

000000000: 94 FB
000000064: 94 FA
0000000C8: 94 F9
00000012C: 94 F8
000000190: 94 F7
0000001F4: 94 F6
000000258: 94 F5
0000002BC: 94 F4
000000320: 94 F3
000000384: 94 F2
000001000: 94 F1
000001064: 94 20

【讨论】:

  • 所有答案都很有用,但这个解决方案是迄今为止最有效的。非常感谢。这对我很有帮助,你让我学到了新东西。
【解决方案2】:

您可以使用decShow.split("\n"),它会通过换行符将字符串拆分为多个字符串。您也可以使用相同的内容,例如,如果您想用逗号分隔第一部分 decShow.split(",")

此外,我认为对于这个问题,您还需要根据您的处理方式执行一些子字符串。您可以在其他地方阅读更多相关信息...

How to display the first few characters of a string in Python?

【讨论】:

    【解决方案3】:

    您需要使用str.splitlines().split('\n') 将字符串拆分成一行,然后去掉不需要的字符。

    x = "\n".join([line.strip("->").strip(",") for line in decShow.splitlines()])
    

    【讨论】:

      【解决方案4】:

      如果decShowstr,那么您的for 循环将循环遍历字符,而不是行。为了遍历由newline 字符分隔的行,请尝试使用str.splitlines

      for line in decShow.splitlines():
          // convert line to your Hex representation here
      

      【讨论】:

        【解决方案5】:

        for line in decShowdecShow 视为字符列表。您希望拥有decShow 中所有行的列表,可以使用decShow.split("\n") 轻松访问,然后for line in decShow.split("\n") 将为每个line 提供decShow 中单行的值。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多