如何在python中解析变量中的元组数据

时间:2013-04-10 00:16:21

标签: python

我正在开发一个API,它从我们的后端获取一些连接信息,并将其设置为变量。在需要时,需要一些关于如何解析这些数据以获得我需要的建议。下面是我变量中输出的示例。

(ArrayOfString){
   string[] = 
      "Starting Up
- AuthCode OK
- Found 4123 Devices
Done
OK",
      "007.blahname.com AB Publishing   1.1.1.1 CentOS Linux 5.0            
",
      "027503-blah  test blah   1.1.1.2 NetScaler OS    Network Gathering   1.1.1.1 22
",
      "028072-;alskdjf; Alpha Group 192.168.19.100  CentOS Linux 5  SSH 2.2.2.2 2022
",
      "028072-4alksgjasdfserver Alpha Group 192.168.19.101  CentOS Linux 5  SSH 2.3.4.5 2022
",

不确定是否容易看到,但所有内容都以制表符分隔。我最终需要的是,它是否设置为列,因此我可以搜索设备名称(第1列),并读取关联的IP,端口和连接方法(028072示例中的列7,8和6)以上。
任何有关从哪里开始的帮助/想法都会有所帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用标准库中的CSV module

答案 1 :(得分:0)

我相信,您可以专门用.split('\t')标签或空格.split()进行拆分。

答案 2 :(得分:0)

您向我们展示的内容看起来像C#源代码。如果这是你实际得到的,你需要首先解析该源代码中的字符串,然后你可以解析这些字符串中的列。

所以,首先:

r = re.compile(r'"(.*?)"', re.MULTILINE | re.DOTALL)
lines = r.findall(data)

接下来,第一个字符串(其中包含一堆换行符)似乎是某种您想要跳过的标题信息。此外,每一行都有一个换行符。所以,让我们解决这两个问题:(我们可以在正则表达式中删除该换行符,但这样做也很容易。)

lines = [line.rstrip('\n') for line in lines[1:]]

现在,每个字符串都可以按标签分割成列,对吧?

values = [line.split('\t') for line in lines]

就是这样。

作为替代方案,我们可以完成StringIO(''.join(lines))并将其传递给csv.reader(sio, delimiter='\t') ...如果解析比split更复杂,我可能会这样做。但在这种情况下,我认为它增加了比节省更多的复杂性。


但是有一个问题。如果您已正确复制并粘贴,那些的字符串中都有选项卡,它们有空格。并且,由于列本身具有内部空间,并且没有引用或转义,因此没有明确的方法来拆分它们。您可以编写一些启发式代码,尝试通过猜测制表位来重建选项卡,假设任何2个或更多空格的运行必须是制表符等,但这将需要很多工作要做。