从CSV文件中删除换行符

时间:2019-05-12 15:32:24

标签: python csv

我有一个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用户...

1 个答案:

答案 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上继续。冲洗,重复。