Python CSV字符串切片问题

时间:2016-11-04 05:43:12

标签: python string email csv

我是Python的开始,我正在尝试清理CSV文件中的数据。

我有一个电子邮件列表,但有些字段有多个这样的电子邮件:

companyNameA | shana@example.com;privacy@example.com;info@example.com | date joined

我不明白如何复制每封电子邮件的行。其他数据应该保持不变,但电子邮件应该是不同的,如下所示:

companyNameA | shana@example.com | date joined
companyNameA | privacy@example.com | date joined
companyNameA | info@example.com | date joined

我试过这个,但它不起作用:

f = open('data_file.csv')
csv_f = csv.reader(f)

for row in csv_f:
    email = row[1]
    single_email = email.rsplit(';', 1)[0]  

3 个答案:

答案 0 :(得分:1)

你需要逐行读取一个csv并在多行中写入另一个csv。电子邮件列中的电子邮件。

html_attributions

希望这是你所期待的。

答案 1 :(得分:1)

要为每个电子邮件地址创建一行,首先需要读取输入CSV文件中的每一行。这是使用CSV阅读器对象完成的,分隔符设置为|字符。然后,您可以使用writerows()函数一次写入多个行,每个电子邮件地址对应一个,在;字符上拆分第二列条目。

在此示例中,使用生成器完成。对于每个电子邮件地址,将创建一行,其中包含输入行中的第一列,当前电子邮件地址和条目​​行中的最后一列。 writerows()函数继续工作,直到所有电子邮件都被读入(也可以只是1)。

最后,为了在输出中保留额外的空格,首先在当前电子邮件地址上使用strip()来删除任何可能的现有空格,format()用于确保在之前添加空格和在电子邮件地址之后。

import csv    

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

    for row in csv_input:
        csv_output.writerows([row[0], ' {} '.format(email.strip()), row[2]] for email in row[1].split(';'))

注意,Python的CSV模块不允许分隔符为多个字符。

答案 2 :(得分:0)

使用single_email = email.rsplit(';', 1)[0]您只获得一个邮件地址。您可以拆分第二列,然后循环遍历它们,如下所示:

f = open('data_file.csv')
csv_f = csv.reader(f)

for row in csv_f:
    email = row[1]
    for mail_addr in email.split(';'):
        do_something()