Python - 用不同数量的空格格式化输出
Python - formatting output with varying numbers of spaces
我是 python 的新手,正在努力寻找一种方法将类似于下面的输出格式化为 csv。
以下代码运行一个 expect 脚本,该脚本生成由不同数量的空格分隔的列。
out = subprocess.check_output([get_script, "|", "grep Up"], shell=True
print out
1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356
我想要的是删除所有空格并添加一个“,”分隔符。
1501,4122:1501,Mesh,1.2.3.4,Up,262075,261927
1502,4121:1502,Mesh,1.2.3.5,Up,262089,261552
1502,4122:1502,Spok,1.2.3.6,Up,262074,261784
701000703,4121:701000703,Mesh,1.2.3.7,Up,262081,261356
我可以通过 awk 和 awk -v OFS=',' '{=};1'
实现这一点,但我正在努力寻找 python 等价物。
非常感谢任何指导!
拆分 space 上的每一行,然后用逗号连接结果
# The commented out step is needed if out is not a list of lines already
# out=out.strip().split('\n')
for line in out:
print ','.join(line.split())
您可以按如下方式转换out
:
import csv
import StringIO
out = """1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356"""
csv_input = csv.reader(StringIO.StringIO(out), delimiter=' ', skipinitialspace=True)
with open('output.csv', 'wb') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerows(csv_input)
给你 output.csv
文件包含:
1501,4122:1501,Mesh,1.2.3.4,Up,262075,261927
1502,4121:1502,Mesh,1.2.3.5,Up,262089,261552
1502,4122:1502,Spok,1.2.3.6,Up,262074,261784
701000703,4121:701000703,Mesh,1.2.3.7,Up,262081,261356
StringIO
用于使您的 out
字符串显示为供 csv
模块使用的文件对象。
使用 Python 2.7.9
测试
这应该可以通过使用 re
(正则表达式)库中的 sub
函数来实现。
import re
table_str = """
1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356
"""
re.sub(" +", ",", table_str)
sub
函数中的 " +"
字符串文字对所有空格进行贪婪匹配。
我是 python 的新手,正在努力寻找一种方法将类似于下面的输出格式化为 csv。
以下代码运行一个 expect 脚本,该脚本生成由不同数量的空格分隔的列。
out = subprocess.check_output([get_script, "|", "grep Up"], shell=True
print out
1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356
我想要的是删除所有空格并添加一个“,”分隔符。
1501,4122:1501,Mesh,1.2.3.4,Up,262075,261927
1502,4121:1502,Mesh,1.2.3.5,Up,262089,261552
1502,4122:1502,Spok,1.2.3.6,Up,262074,261784
701000703,4121:701000703,Mesh,1.2.3.7,Up,262081,261356
我可以通过 awk 和 awk -v OFS=',' '{=};1'
实现这一点,但我正在努力寻找 python 等价物。
非常感谢任何指导!
拆分 space 上的每一行,然后用逗号连接结果
# The commented out step is needed if out is not a list of lines already
# out=out.strip().split('\n')
for line in out:
print ','.join(line.split())
您可以按如下方式转换out
:
import csv
import StringIO
out = """1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356"""
csv_input = csv.reader(StringIO.StringIO(out), delimiter=' ', skipinitialspace=True)
with open('output.csv', 'wb') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerows(csv_input)
给你 output.csv
文件包含:
1501,4122:1501,Mesh,1.2.3.4,Up,262075,261927
1502,4121:1502,Mesh,1.2.3.5,Up,262089,261552
1502,4122:1502,Spok,1.2.3.6,Up,262074,261784
701000703,4121:701000703,Mesh,1.2.3.7,Up,262081,261356
StringIO
用于使您的 out
字符串显示为供 csv
模块使用的文件对象。
使用 Python 2.7.9
测试这应该可以通过使用 re
(正则表达式)库中的 sub
函数来实现。
import re
table_str = """
1501 4122:1501 Mesh 1.2.3.4 Up 262075 261927
1502 4121:1502 Mesh 1.2.3.5 Up 262089 261552
1502 4122:1502 Spok 1.2.3.6 Up 262074 261784
701000703 4121:701000703 Mesh 1.2.3.7 Up 262081 261356
"""
re.sub(" +", ",", table_str)
sub
函数中的 " +"
字符串文字对所有空格进行贪婪匹配。