Python - 文件处理(写入方法)

时间:2014-11-27 06:59:12

标签: python

我在使用python

编写文件时遇到了麻烦
from validate_email import validate_email

result=open('output1.tsv','wb')

f=open('input.csv','r')

y=[]

result.write('Email_address\tEmail_validation\n')

for i in f:
    y.append(i.replace('\n',''))

for j in y:
    try:
         val=validate_email('%s'%j, verify=True)
    except:
         val = "Check Again"
    result.write('%s\t%s\n'%(j,val))
    print j,val

这里变量x有一些操作,处理它可能需要一些时间。

变量y的计数超过500(输入文件包含700行)。

但是在运行此程序后,只能在输出文件中写入120左右。

2 个答案:

答案 0 :(得分:1)

一个更惯用的python是

emails    = [l.strip() for l in open('input.csv','r').readlines()]
valid     = [str(validate_email(addr, validate=1)) for addr in emails]
validated = ['\t'.join(addr_val) for addr_val in zip(emails, valid)]

with of as open('output.tsv'):
    of.write('Email_address\tEmail_validation\n')
    of.write('\n'.join(validated)) # if needed ; of.write('\n')

编辑以响应来自OP

迟到更多信息

考虑到可能由TimeoutError模块引发smtp异常的可能性,您可以编写辅助函数

def validate_no_timeout(address):
    try:
        response = str(validate_email(address, validate=1))
    except TimeoutError:
        response = "Time Out"
    return response

并重写原始帖子中的第二行以阅读

valid     = [validate_no_timeout(addr) for addr in emails]

注意:在OP中,我看到了对超时错误的通用引用。在我的代码中,由于缺乏来自OP的确切信息,我抓住了TimeoutError异常。

答案 1 :(得分:0)

您在写入文件时使用字符串尝试将其更改为:

t.write('%d\t%d\n'%(j,x))

如果这不能解决问题,请尝试扩展问题中的代码,以便我们提供更多帮助。