Python 将三行 .split() 合并为一行?

我有这段代码,我希望可以将三个分割命令组合成一行,但我不知道如何组合:


from __future__ import print_function       # Must be first import

import subprocess32 as sp


def get_mouse_coordinates():

    ''' Get mouse co-ordinates with xdotool:

            $ xdotool getmouselocation

            x:4490 y:1920 screen:0 window:65011722

    '''

    command_line_list = ['xdotool', 'getmouselocation']


    pipe = sp.Popen(command_line_list, stdout=sp.PIPE, stderr=sp.PIPE)

    text, err = pipe.communicate()              # This performs .wait() too


    print("returncode of subprocess:",pipe.returncode)


    if text:

        x, y, z = text.split(' ',2)             # Grab 'x:9999' 'y:9999' 'junk'

        x_ret = x.split(':')[1]                 # Grab right of 'x:9999'

        y_ret = y.split(':')[1]                 # Grab right of 'y:9999'


        print("standard output of subprocess:")

        print(text,'x-offset:',x_ret,'y-offset:',y_ret)

        return x_ret, y_ret


    if err:

        print("standard error of subprocess:")

        print(err)

        return 100, 100

可能非常明显,但以下是三行代码:


x, y, z = text.split(' ',2)             # Grab 'x:9999' 'y:9999' 'junk'

x_ret = x.split(':')[1]                 # Grab right of 'x:9999'

y_ret = y.split(':')[1]                 # Grab right of 'y:9999'

如果您好奇,请在终端中输出:


returncode of subprocess: 0

standard output of subprocess:

x:3400 y:558 screen:0 window:23073340

 x-offset: 3400 y-offset: 558


慕标5832272
浏览 1546回答 1
1回答

子衿沉夜

一种方法是使用正则表达式。本质上,您只是想提取数字,因此模式非常简单:    import re        x, y, screen, window = re.findall("[0-9]+", text)请注意,如果数字可以为负数,您将需要一个稍长的模式(但似乎在您的情况下,它们不会):    import re        x, y, screen, window = re.findall("[-+]?[0-9]+", text)正则表达式模块的文档:https ://docs.python.org/3/library/re.html您还可以使用列表理解:    x, y, screen, window = [tok.split(":")[1] for tok in text.split(" ")]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python