您的位置:首页 > 编程语言 > Python开发

一个简单文本处理问题的多种解法

2012-10-11 00:00 302 查看
问题:

将如下形式文本

Name: John Doe1
address : somewhere
phone: 123-123-1234

Name: John Doe2
address : somewhere
phone: 123-123-1233

Name: John Doe3
address : somewhere
phone: 123-123-1232


转换成如下形式

Name: John Doe1                address : somewhere          phone: 123-123-1234
Name: John Doe2                address : somewhere          phone: 123-123-1233
Name: John Doe3                address : somewhere          phone: 123-123-1232


解法1:awk

awk 'BEGIN { FS="\n"; RS=""; OFS="\t\t" } { print $1, $2, $3 }' file.txt

解法2:sed

cat input.txt | sed '/^$/d' | sed 'N; s:\n:\t\t:; N; s:\n:\t\t:'

cat input.txt | sed '/^$/d' | sed 'N; N; s:\n:\t\t:g'

解法3:python

#!/usr/bin/env python

def parse(inputfile, outputfile):
dictInfo = {'Name':None, 'address':None, 'phone':None}
for line in inputfile:
if line.startswith('Name'):
dictInfo['Name'] = line.split(':')[1].strip()
elif line.startswith('address'):
dictInfo['address'] = line.split(':')[1].strip()
elif line.startswith('phone'):
dictInfo['phone'] = line.split(':')[1].strip()
s = 'Name: '+dictInfo['Name']+'\t'+'address: '+dictInfo['address'] \
+'\t'+'phone: '+dictInfo['phone']+'\n'
outputfile.write(s)

if __name__ == '__main__':
with open('output.txt', 'w') as outputfile:
with open('infomation.txt') as inputfile:
parse(inputfile, outputfile)


解法4 (paste)

chenqi@chenqi-OptiPlex-760:~/mypro/python/file-parsing$ paste -s -d'\t\t\t\n' infomation.txt
Name: John Doe1	address : somewhere	phone: 123-123-1234
Name: John Doe2	address : somewhere	phone: 123-123-1233
Name: John Doe3	address : somewhere	phone: 123-123-1232
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  text-parsing sed awk python