Python将多行放到数组中

时间:2011-10-13 11:11:15

标签: python arrays line

使用regexp我正在搜索包含数据的文本文件。我得到类似的输出。 以下是我得到的例子:

36
37
36
36
36
76
39
36
68
36
56
36
36
36
...

我需要所有36个像这样的数组['36','36',....]示例代码如下。

#!/usr/bin/python

import re

log = re.compile('Deleted file number: first: (\d+), second (\d+), third (\d+), fourth (\d+), bw (\d+), value: ([\dabcdefx]+), secondvalue: ([\d.]+)LM, hfs: ([\d.-]+)ls')

logfile = open("log.txt", "r").readlines()

List = []

for line in logfile:
    m = log.match(line)
    if m:
        first       = int (m.group(1))
        second      = int (m.group(2))
        third       = int (m.group(3))
        fourth      = int (m.group(4))
        bw          = int (m.group(5))
        value       = int (m.group(6),0)
        secondvalue = float (m.group(7))
        hfs         = float (m.group(8))

        List.append(str(first)+","+str(second)+"," \
                   +str(third)+","+str(fourth)+"," \
                   +str(bw)+","+str(value)+"," \
                   +str(secondvalue)+","+str(hfs))

for result in List:
    print(result)

我可以使用sys.stdout.write()将它显示在与打印项相同的一行中, 但是如何将所有这些放入一个数组中,如array = [“149”,149“,”153“,”153“等等]

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:5)

您的数据已在列表中。如果要以数组表示法打印出来,请将其替换为:

for result in List:
    print(result)

用这个:

print List

你真的不应该打电话给你的列表List,但是list是一个保留字,List容易混淆。

顺便说一下,这个:

List.append(str(first)+","+str(second)+"," \
               +str(third)+","+str(fourth)+"," \
               +str(bw)+","+str(value)+"," \
               +str(secondvalue)+","+str(hfs))
如果你使用其他一些Python特性,比如join:

,那么

就更容易理解了

List.append(",".join([first, second, third, fourth, bw, value, secondvalue, hfs]))

实际上,由于你的变量只是正则表达式中的组,你可以将整个事情简化为:

List.append(",".join(m.groups()))

答案 1 :(得分:1)

尝试过:

print List

如果你想要一个字符串:

result = str(List)

答案 2 :(得分:0)

假设你拥有的是字符串:

'"149" "149" "153" "153" "159" "159" "165" "165" "36" "36" "44"'

(目前还不清楚你是如何使用正则表达式获取数据的,因为你没有显示代码),请使用

[x.strip('"') for x in '"149" "149" "153" "153" "159" "159" "165" "165" "36" "36" "44"'.split()]

获取列表(不是数组,这是另一回事):

['149', '149', '153', '153', '159', '159', '165', '165', '36', '36', '44']

如果你真正想要的一个数组(它只能存储数值,而不是你正在展示的数字的字符串表示,请使用):

import array
foo = array.array('i',(int(x.strip('"')) for x in '"149" "149" "153" "153" "159" "159" "165" "165" "36" "36" "44"'.split()))