我有来自csv文件的以下输出:
word1|word2|word3|word4|word5|word6|01:12|word8
word1|word2|word3|word4|word5|word6|03:12|word8
word1|word2|word3|word4|word5|word6|01:12|word8我需要做的是更改时间字符串,如这个00:01:12。我的想法是提取列表项目7,并在前面添加一个"00:“字符串。
import csv
with open('temp', 'r') as f:
reader = csv.reader(f, delimiter="|")
for row in reader:
fixed_time = (str("00:") + row[7])
begin = row[:6]
end = row[:8]
print begin + fixed_time +end获取错误消息:
TypeError:只能将列表(而不是"str")连接到列表中。
我也在这个帖子上看过。
how to change [1,2,3,4] to '1234' using python
我想知道我的独白方式是否正确。也许需要用斯普利特或者别的什么来做这件事。
thx寻求任何帮助
发布于 2014-04-08 01:00:59
抛出异常的行是
print begin + fixed_time +end因为begin和end都是,所以lists、和fixed_time都是字符串。每当您获取列表的片(即row[:6]和row[:8]部件)时,都会返回一个列表。如果你只想打印出来,你可以
print begin, fixed_time, end你就不会有任何错误。
修正代码:
我打开一个新的文件来写(我把它叫做'final',但你可以把它命名为你想要的任何东西),我只需要修改一下就可以把所有的东西都写到它上面。最简单的方法是更改具有行(row[6] here)的列表中的一个元素,并使用'|'.join在每个列之间编写一个管道字符。
import csv
with open('temp', 'r') as f, open('final', 'w') as fw:
reader = csv.reader(f, delimiter="|")
for row in reader:
# just change the element in the row to have the extra zeros
row[6] = '00:' + row[6]
# 'write the row back out, separated by | characters, and a new line.
fw.write('|'.join(row) + '\n')发布于 2014-04-08 01:02:22
您可以使用regex:
>>> txt = """\
... word1|word2|word3|word4|word5|word6|01:12|word8
... word1|word2|word3|word4|word5|word6|03:12|word8
... word1|word2|word3|word4|word5|word6|01:12|word8"""
>>> import re
>>> print(re.sub(r'\|(\d\d:\d\d)\|', r'|00:\1|', txt))
word1|word2|word3|word4|word5|word6|00:01:12|word8
word1|word2|word3|word4|word5|word6|00:03:12|word8
word1|word2|word3|word4|word5|word6|00:01:12|word8https://stackoverflow.com/questions/22925720
复制相似问题