我有一个csv文件,其每行应以地理坐标结尾(因此为数字)。不知何故某些换行会污染某些行,所以我想删除它们。
由于其他几行都可以了,因此计划是删除换行符并在我的csv文件行的末尾添加一个空格,因此,每行不以数字或“ None”结尾(值在无法获取坐标时使用。)
代替:
www.audiar.org,www.epfbretagne.fr,Agence
d'urbanisme,-1.68186449144,48.1119791219,-1.68186449144,48.1119791219
www.audiar.org,www.fnau.org,Agence
d'urbanisme,-1.68186449144,48.1119791219,None,None
我需要得到这个:
www.audiar.org,www.epfbretagne.fr,Agence d'urbanisme,-1.68186449144,48.1119791219,-1.68186449144,48.1119791219
www.audiar.org,www.fnau.org,Agence d'urbanisme,-1.68186449144,48.1119791219,None,None
但是我必须承认我不知道如何实现这一目标...我检查了一些其他有关我的问题的帖子。解决方案似乎正在使用sed,但我在这里没有linux(并且不确定要了解语法),而且我是可怜的可怜的python用户...
答案 0 :(得分:0)
假设您连续两行:
>>> line1 = 'www.audiar.org,www.epfbretagne.fr,Agence'
>>> line2 = "d'urbanisme,-1.68186449144,48.1119791219,-1.68186449144,48.1119791219"
尝试将第一行的最后部分解释为数字或None
。如果失败,请连接下一行:
import ast
last_part = line1.rsplit(',', 1)[1] # == 'Agence'
try:
data = ast.literal_eval(last_part)
except:
# this line is incorrect
output = line1 + ' ' + line2
else:
if isinstance(data, float) or data is None:
output = line1 # everything is OK
else:
raise ValueError("Malformed data!")
# `output` is one processed line
然后将line2
移至line1
并将新行读入line2
。如果这两行是串联的,则可能需要特殊处理,因为“错误”(以浮点或None
结尾的行 not )可能会在line2
上继续。冲洗,重复。