Skip to main content
 首页 » 编程设计

python csv复制列

2025年05月04日8zhengyun_ustc

我有一个包含以下内容的文件

first_name,last_name,uid,email,dep_code,dep_name 
john,smith,jsmith,jsmith@gmail.com,finance,21230 
john,king,jking,jjing@gmail.com,human resource,31230 

我想复制“email”列并创建一个新列“email2”,然后将 gmail.com 从 email2 列替换为 hotmail.com

我是 python 的新手,所以需要专家的帮助,我尝试了几个脚本,但如果有更好的方法,请告诉我。原始文件包含 60000 行。

with open('c:\\Python27\\scripts\\colnewfile.csv', 'rb') as fp_in1, open('c:\\Python27\\scripts\\final.csv', 'wb') as fp_out1: 
    writer1 = csv.writer(fp_out1, delimiter=",") 
    reader1 = csv.reader(fp_in1, delimiter=",") 
    domain = "@hotmail.com" 
    for row in reader1: 
        if row[2:3] == "uid": 
            writer1.append("Email2") 
        else: 
            writer1.writerow(row+[row[2:3]]) 

这是最终的脚本,唯一的问题是它没有完成整个输出文件,它只显示 61409 行,而在输入文件中有 61438 行。

inFile = 'c:\Python27\scripts\in-093013.csv' outFile = 'c:\Python27\scripts\final.csv'

打开(inFile,'rb')作为 fp_in1,打开(outFile,'wb')作为 fp_out1: writer = csv.writer(fp_out1, delimiter=",") reader = csv.reader(fp_in1, delimiter=",") 对于阅读器中的 col: 德尔科尔[6:] writer.writerow(列) 标题=下一个(读者) writer.writerow(headers + ['email2']) 对于阅读器中的行: 如果 len(row) > 3: email = email.split('@', 1)[0] + '@hotmail.com' writer.writerow(行+[电子邮件])

请您参考如下方法:

如果您在读取器上调用 next(),您一次会得到一行;用它来复制标题。复制电子邮件列非常简单:

import csv 
 
infilename = r'c:\Python27\scripts\colnewfile.csv' 
outfilename = r'c:\Python27\scripts\final.csv' 
 
with open(infilename, 'rb') as fp_in, open(outfilename, 'wb') as fp_out: 
    reader = csv.reader(fp_in, delimiter=",") 
    headers = next(reader)  # read first row 
 
    writer = csv.writer(fp_out, delimiter=",") 
    writer.writerow(headers + ['email2']) 
 
    for row in reader: 
        if len(row) > 3: 
            # make sure there are at least 4 columns 
            email = row[3].split('@', 1)[0] + '@hotmail.com' 
        writer.writerow(row + [email]) 

此代码在第一个 @ 符号处拆分电子邮件地址,获取拆分的第一部分并在其后添加 @hotmail.com:

>>> 'example@gmail.com'.split('@', 1)[0] 
'example' 
>>> 'example@gmail.com'.split('@', 1)[0] + '@hotmail.com' 
'example@hotmail.com' 

以上产生:

first_name,last_name,uid,email,dep_code,dep_name,email2 
john,smith,jsmith,jsmith@gmail.com,finance,21230,jsmith@hotmail.com 
john,king,jking,jjing@gmail.com,human resource,31230,jjing@hotmail.com 

用于您的示例输入。