如何在python中的csv单元格中插入字符?

时间:2017-03-13 09:14:58

标签: python csv

我是python的新手。这是我的csv文件:

data;data;name surname; data; data
data;data;name surname; data; data
data;data;name surname; data; data
data;data;name surname; data; data

我想要做的是插入“;”使名称和姓氏2列像这样:

data;data;name;surname; data; data
data;data;name;surname; data; data
data;data;name;surname; data; data
data;data;name;surname; data; data

但困难的是有时会有不止一个空间,如:

data;data;name surname surname2; data
data;data;name surname surname2 surname3; data 

我只是想替换第一个空格,而不是所有的空格:

data;data;name;surname surname2; data
data;data;name;surname surname2 surname3; data 

这是我的代码,但它取代了每个空格:

def modify_rows():
    with open("result2.csv","rb") as source:
          rdr= csv.reader(source, delimiter=';')
          with open("result3.csv","wb") as result:
             wtr= csv.writer(result,delimiter=';')
                 for r in rdr:
                    rowname = r[3].replace(' ', ';')
                   wtr.writerow((r[0],r[1],rowname,r[2]))    

希望我能找到帮助。

2 个答案:

答案 0 :(得分:1)

通过传递maxsplit参数,您可以告诉Python split()在给定数量的匹配后停止。因此,在您的情况下,您只需要在第一个空格之后拆分,如下所示:

import csv

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output, delimiter=';')

    for row in csv.reader(f_input, delimiter=';'):
        # Skip empty lines
        if len(row) > 3:
            try:
                name, surname = row[2].split(' ', 1)
            except ValueError as e:
                # No surname
                name, surname = row[2], ''

            row[2] = name
            row.insert(3, surname)
            csv_output.writerow(row)

对于输入:

data;data;name surname1 surname2;data;data
data;data;name surname;data;data
data;data;name surname;data;data
data;data;name surname;data;data

你会得到:

data;data;name;surname1 surname2;data;data
data;data;name;surname;data;data
data;data;name;surname;data;data
data;data;name;surname;data;data

答案 1 :(得分:0)

>>> name_surname_regex = re.compile('^([^;]*;[^;]*;)([^\s]*\s[^\s]*)(.*)$')
>>> match_obj = name_surname_regex.match(data[1])
>>> for list_d in data:
        match_obj = name_surname_regex.match(list_d)
        print match_obj.group(1) + match_obj.group(2).replace(' ', ';') + match_obj.group(3)

相信我,如果数据不符合您的要求,您必然会在代码中遇到很多错误