我正在开发一个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)以上。
任何有关从哪里开始的帮助/想法都会有所帮助。
答案 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个或更多空格的运行必须是制表符等,但这将需要很多工作要做。