我有一个包含以下内容的文件
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
用于您的示例输入。
