使用python将ping输出中的值解析为csv

时间:2015-11-20 11:16:41

标签: python regex string parsing csv

我使用RE编写了一个代码来查找“time =”并将以下值保存在字符串中。然后我使用csv.writer属性writerow,但每个数字都被解释为一个列,这给我带来麻烦。不幸的是,没有'writecolumn'属性。我应该将值保存为数组而不是字符串并分别写入每一行吗?

import re
import csv
inputfile = open("ping.txt")
teststring = inputfile.read()
values = re.findall(r'time=(\d+.\d+)', teststring)
with open('parsed_ping.csv', 'wb') as csvfile:
    writer = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(values)

编辑:我明白“价值”已经是一个清单。我尝试迭代它并用

为每个项目写一行
for item in values:
    writer.writerow(item)

现在我在每个角色后面都有一个空格,比如

4 6 . 6
4 7 . 7

EDIT2:空格是分隔符。如果我将分隔符更改为逗号,我会在数字之间输入逗号。我只是不明白为什么他将每个数字解释为一个单独的列。

2 个答案:

答案 0 :(得分:2)

如果您的csv文件只包含一列,那么它实际上不是一个以逗号分隔的文件"再来了,是吗?

直接将列表写入文件:

import re
inputfile = open("ping.txt")
teststring = inputfile.read()
values = re.findall(r'time=(\d+\.\d+)', teststring)
with open('parsed_ping.csv', 'w') as csvfile:
    csvfile.write("\n".join(values)

答案 1 :(得分:1)

我解决了这个问题。我只需要在作者中使用方括号。

CREATE TABLE payment 
    (`serial` int, `startdat` varchar(50),
   `enddat` varchar(50), `periode` varchar(50), `money` varchar(50))
;


INSERT INTO payment
    (`serial`, `startdat`, `enddat` , `periode` , `money` )
VALUES
    (1, '20180102','20200101','24','100'),
    (2, '20170102','20200101','36','100'),
    (3,'20180102','20190101','12','100');
SELECT
    (

        IF (
            PERIODE = 24,
            (
            IF (
                    (
                        '2018' BETWEEN (YEAR(STARTDAT))
                        AND (YEAR(ENDDATE))
                    ),
                    0,
                    (
                        ((money* 0.3) / 12) * (
                            IF (
                                (
                                    '2018' BETWEEN (YEAR(STARTDAT))
                                    AND (YEAR(ENDDATE))
                                ),
                                `12`,
                                (
                                IF (
                                        (`2018` = YEAR(STARTDAT)),
                                        (`12` - MONTH(STARTDAT) + 1),
                                        (
                                            IF (
                                                ('2018' = YEAR(ENDDATE)),
                                                (MONTH(ENDDATE) - 1),
                                                ''
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            ),
            (
                IF (
                    PERIODE = 36,
                    (
                    IF (
                            (
                                '2018' BETWEEN (YEAR(STARTDAT))
                                AND (YEAR(ENDDATE))
                            ),
                            0,
                            (
                                ((money* 0.2) / `12`) * (
                                    IF (
                                        (
                                            '2018' BETWEEN (YEAR(STARTDAT))
                                            AND (YEAR(ENDDATE))
                                        ),
                                        `12`,
                                        (
                                            IF (
                                                `2018` = YEAR (STARTDAT),
                                                (`12` - MONTH(STARTDAT) + 1),
                                                (
IF ((`2018` = YEAR (ENDDATE)),(MONTH(ENDDATE) - 1)),null)
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                ),
                (
                    IF (
                        (
                            '2018' BETWEEN (YEAR(STARTDAT))
                            AND (YEAR(ENDDATE))
                        ),
                        0,
                        ((money* 0.6) / `12`) * (
                            IF (
                                (
                                    '2018' BETWEEN (YEAR(STARTDAT))
                                    AND (YEAR(ENDDATE))
                                ),
                                `12`,
                                (
                                    IF (
                                        (`2018` = YEAR(STARTDAT)),
                                        (`12` - MONTH(STARTDAT) + 1),
                                        (
                                            IF (
                                                `2018` = YEAR (ENDDATE),
                                                (MONTH(ENDDATE) - 1),
                                                ''
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    ) AS '2018'
FROM
payment

这给了我正确的输出。