在Python中进行正则替换
我有一个CSV文件,里面有很多条记录,每条记录都有两个以Unix时间戳格式表示的日期。
我有一个叫做 convert()
的方法,它可以把时间戳转换成 YYYYMMDD
的格式。
现在,因为每一行都有两个时间戳,我该怎么把这两个时间戳都替换成新的值呢?
补充说明:我想把每个时间戳都转换成 YYYYMMDD
格式。这让我很困扰,因为 re.findall()
返回的是一个列表。
4 个回答
1
我不能评论你的问题,不过你有没有看看Python的CSV模块?这个模块可以帮助你处理CSV文件。你可以在这里找到相关的文档:http://docs.python.org/library/csv.html#module-csv
3
如果你知道要替换的内容:
p = re.compile( r',\d{8},')
p.sub( ','+someval+',', csvstring )
如果这是格式的改变:
p = re.compile( r',(\d{4})(\d\d)(\d\d),')
p.sub( r',\3-\2-\1,', csvstring )
编辑:抱歉,我刚意识到你说的是Python,所以上面的内容做了修改。
1
我猜你说的“unix时间戳格式的日期”是指自某个起始时间以来的秒数。这里假设文件里的每个数字都是一个UNIX时间戳。如果不是这样的话,你需要调整一下正则表达式:
import re, sys
# your convert function goes here
regex = re.compile(r'(\d+)')
for line in sys.stdin:
sys.stdout.write(regex.sub(lambda m:
convert(int(m.group(1))), line))
这段代码是从标准输入读取数据,并对每个找到的数字调用转换函数。
这里的“窍门”在于 re.sub
可以接受一个函数,这个函数可以把匹配到的对象转换成字符串。我假设你的转换函数需要一个整数并返回一个字符串,所以我用了一个lambda表达式作为适配器函数,来提取匹配结果的第一个组,把它转换成整数,然后把这个整数传给转换函数。