从 python 中的 CSV 中的字符串中删除空格
Removing spaces from astring within a CSV in python
我有一个由程序输出的 CSV。分隔符是 space。其中 "cell" 个 CSV 由用户手动输入,其余自动生成。问题是用户可能在他们手动输入的字符串中有一个 space。如果我将其输入到 excel 中,它会导致列关闭。我正在尝试在 Python 中编写一个程序,它将消除用户输入中的这些 space 并用下划线替换它们。
所以我想从这里开始
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方法class
"light rain event".replace(' ', '_')
如果能在输入数据的时候把空格替换掉就更好了。但是,如果您已经收集了数据,则需要一个规则来识别其他字段
>>> s = "600 2 light rain event 2015-01-12 17:48:07"
>>> parts = s.split(" ")
规则:保留第一个和最后两个字段。将余数中的“ ”替换为“_”
>>> 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'
你需要根据前后的空格数来拆分它,因为我猜它中间可以有任意数量的空格。
#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 几乎是用同样的方式来做的:)
我有一个由程序输出的 CSV。分隔符是 space。其中 "cell" 个 CSV 由用户手动输入,其余自动生成。问题是用户可能在他们手动输入的字符串中有一个 space。如果我将其输入到 excel 中,它会导致列关闭。我正在尝试在 Python 中编写一个程序,它将消除用户输入中的这些 space 并用下划线替换它们。
所以我想从这里开始
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方法class
"light rain event".replace(' ', '_')
如果能在输入数据的时候把空格替换掉就更好了。但是,如果您已经收集了数据,则需要一个规则来识别其他字段
>>> s = "600 2 light rain event 2015-01-12 17:48:07"
>>> parts = s.split(" ")
规则:保留第一个和最后两个字段。将余数中的“ ”替换为“_”
>>> 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'
你需要根据前后的空格数来拆分它,因为我猜它中间可以有任意数量的空格。
#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 几乎是用同样的方式来做的:)