我是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]
答案 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()