Python发出CSV切片字符串

2024-05-29 04:06:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始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]  

Tags: 文件csv数据infocomdateexample电子邮件
3条回答

你只有一个地址。你可以拆分第二列,然后循环遍历它们,就像这样:

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()

你需要从一个csv逐行读取和写入到另一个在多行的情况下,在电子邮件栏中的电子邮件数。你知道吗

fin = open('data_file.csv')
fout = open('out_data_file.csv', 'w')

csv_fin = csv.reader(fin)
csv_fout = csv.writer(fout)

for row in csv_fin:
    emails = row[1].split(';')
    if len(emails) > 1:
        for e in emails:
            csv_fout.writerow((row[0], e, row[2]))
    else:
       csv_fout.writerow(row)

希望这是你所期待的。你知道吗

要为每个电子邮件地址创建一行,首先需要从输入CSV文件中读取每一行。这是使用CSV reader对象完成的,该对象的分隔符设置为|字符。然后可以使用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模块不允许分隔符是多个字符。你知道吗

相关问题 更多 >

    热门问题