Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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中从CSV中删除空格_Python_Csv_Space_Reader - Fatal编程技术网

在python中从CSV中删除空格

在python中从CSV中删除空格,python,csv,space,reader,Python,Csv,Space,Reader,我有一个由程序输出的CSV。分隔符是一个空格。CSV的一个“单元格”由用户手动输入,其余的自动生成。问题是用户手动输入的字符串中可能有空格。如果我将其输入excel,将导致列关闭。我试图用Python编写一个程序,消除用户输入中的这些空格,并用下划线替换它们 所以我想从这里开始 600 2 light rain event 2015-01-12 17:48:07 对此 600 2 gmk_light_rain_event 2015-01-12 17:48:07 有没有办法用python编

我有一个由程序输出的CSV。分隔符是一个空格。CSV的一个“单元格”由用户手动输入,其余的自动生成。问题是用户手动输入的字符串中可能有空格。如果我将其输入excel,将导致列关闭。我试图用Python编写一个程序,消除用户输入中的这些空格,并用下划线替换它们

所以我想从这里开始

 600 2 light rain event 2015-01-12 17:48:07
对此

 600 2 gmk_light_rain_event 2015-01-12 17:48:07

有没有办法用python编写此代码?

使用str类的replace方法


“小雨事件”。replace(“,”)
使用str类的replace方法


“小雨事件”。替换(“,”)

如果可以在输入数据时替换更接近的空格,则效果会更好。但是,如果您已经收集了数据,则需要一个规则来在其他字段中识别该字段

>>> s = "600 2 light rain event 2015-01-12 17:48:07"
>>> parts = s.split(" ")
规则:保留第一个和最后两个字段。将余数中的“”替换为“\u1”

>>> parts[:2] + ["_".join(parts[2:-2])] + parts[-2:]
['600', '2', 'light_rain_event', '2015-01-12', '17:48:07']
连接结果列表的各个部分

>>> " ".join(parts[:2] + ["_".join(parts[2:-2])] + parts[-2:])
'600 2 light_rain_event 2015-01-12 17:48:07'
您可以像这样添加“gmk”标记

>>> " ".join(parts[:2] + ["gmk_"+"_".join(parts[2:-2])] + parts[-2:])
'600 2 gmk_light_rain_event 2015-01-12 17:48:07'

如果您可以在输入数据时替换更靠近的空格,则效果会更好。但是,如果您已经收集了数据,则需要一个规则来在其他字段中识别该字段

>>> s = "600 2 light rain event 2015-01-12 17:48:07"
>>> parts = s.split(" ")
规则:保留第一个和最后两个字段。将余数中的“”替换为“\u1”

>>> parts[:2] + ["_".join(parts[2:-2])] + parts[-2:]
['600', '2', 'light_rain_event', '2015-01-12', '17:48:07']
连接结果列表的各个部分

>>> " ".join(parts[:2] + ["_".join(parts[2:-2])] + parts[-2:])
'600 2 light_rain_event 2015-01-12 17:48:07'
您可以像这样添加“gmk”标记

>>> " ".join(parts[:2] + ["gmk_"+"_".join(parts[2:-2])] + parts[-2:])
'600 2 gmk_light_rain_event 2015-01-12 17:48:07'
您可以使用正则表达式:

>>> import re
>>> s="light rain event"
>>> re.sub(r'\s+', '_', s)
'light_rain_event'
>>> 'gmk_'+re.sub(r'\s+', '_', s)
'gmk_light_rain_event'
您可以使用正则表达式:

>>> import re
>>> s="light rain event"
>>> re.sub(r'\s+', '_', s)
'light_rain_event'
>>> 'gmk_'+re.sub(r'\s+', '_', s)
'gmk_light_rain_event'

你需要根据之前和之后的空格数来分割它,因为我猜它可以在中间有很多空格。

#Line read from CSV
line = "600 2 light rain event 2015-01-12 17:48:07"

#Just incase any parts need changing
spaceBetweenWords = "_"
prefix = "gmk"

#Split by spaces
separatedLine = line.split( " " )

#Get the middle part that needs underscores
startBit = " ".join( separatedLine[:2] )
middleBit = spaceBetweenWords.join( [prefix] + separatedLine[2:-2] )
endBit = " ".join( separatedLine[-2:] )


print "{0} {1} {2}".format( startBit, middleBit, endBit )
# Result: 600 2 gmk_light_rain_event 2015-01-12 17:48:07

我添加了一个地方,如果需要的话,你可以很容易地改变下划线和“GMK”,虽然我可以看到约翰几乎是这样做的:“

< p>你需要根据之前和之后的空格数来分割它,因为我猜它可以在中间有任何空格。
#Line read from CSV
line = "600 2 light rain event 2015-01-12 17:48:07"

#Just incase any parts need changing
spaceBetweenWords = "_"
prefix = "gmk"

#Split by spaces
separatedLine = line.split( " " )

#Get the middle part that needs underscores
startBit = " ".join( separatedLine[:2] )
middleBit = spaceBetweenWords.join( [prefix] + separatedLine[2:-2] )
endBit = " ".join( separatedLine[-2:] )


print "{0} {1} {2}".format( startBit, middleBit, endBit )
# Result: 600 2 gmk_light_rain_event 2015-01-12 17:48:07
我添加了一点,如果需要的话,您可以轻松地更改下划线和“gmk”,尽管在查找时我可以看到John基本上也是这样做的:)