我使用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:空格是分隔符。如果我将分隔符更改为逗号,我会在数字之间输入逗号。我只是不明白为什么他将每个数字解释为一个单独的列。
答案 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
这给了我正确的输出。