Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用不同数量的空格格式化输出_Python_Python 2.7_Parsing_String Formatting_Delimiter - Fatal编程技术网

Python-使用不同数量的空格格式化输出

Python-使用不同数量的空格格式化输出,python,python-2.7,parsing,string-formatting,delimiter,Python,Python 2.7,Parsing,String Formatting,Delimiter,我是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

我是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
我想要的是删除所有空白并添加一个“,”分隔符

15014122:1501,网格,1.2.3.4,向上,262075261927
15024121:1502,网格,1.2.3.5,向上,262089261552
15024122:1502,斯波克,1.2.3.6,向上,262074261784
7010007034121:701000703,网格,1.2.3.7,向上,262081261356

我可以通过awk实现这一点,使用
awk-vofs=','{$1=$1};1'
但我很难找到与python等效的版本


非常感谢您的指导

在空格中拆分每一行,然后用逗号连接结果

# 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())

您可以将
转换为
,如下所示:

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
用于使您的
out
字符串显示为
csv
模块要使用的文件对象


使用Python2.7.9进行测试这应该可以通过使用
re
(regex)库中的
sub
函数来实现


sub
函数中的
“+”
字符串文字对所有空格进行贪婪匹配。

不要使用
str
作为变量名。如果某些字段具有嵌入空格,该怎么办?谢谢,我喜欢使用regex的这种方法。工作起来很有魅力!在这种特殊情况下,不需要担心嵌入空间。谢谢!评论中的那篇文章正是我所缺少的。out还没有行列表,所以我尝试的split()和joins()产生了意外的结果。
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)