我是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]))
希望我能找到帮助。
答案 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)
相信我,如果数据不符合您的要求,您必然会在代码中遇到很多错误