如何通过解析进行循环

时间:2018-01-11 00:21:25

标签: python

我有一个代码试图从桌面获取数据,然后解析到网页,翻译并粘贴翻译为输出

import urllib,urllib2

with open('/path to the data/data.txt') as f:
    lines = f.read().splitlines()
with open('/path to the output/output.txt') as ff:

url = 'http://www.uniprot.org/mapping/'

print "From To"
for genename_id in lines:
    params = {
    'from':'ACC+ID',
    'to':'GENENAME',
    'format':'tab',
    'query':genename_id
    }

    data = urllib.urlencode(params)
    request = urllib2.Request(url, data)
    contact = "" # Please set your email address here.
    request.add_header('User-Agent', 'Python %s' % contact)
    response = urllib2.urlopen(request)
    page = response.read(200000)
    ff.write(page.splitlines()[1])

data.txt在

之下
G5E8R3     
Q99MR6-3    
D3YVD3     
G3UZM2     
Q1MWP8     
D3Z2K3     
Q8BZM2     
P09103     
Q9JJG0-3    
Q9R0Q6     
Q3UY11     
Q8C3Z4     
Q3UVN6     
Q80U36     
Q9R1A1  

我试图做两件事

1-我希望能够转换数据,如果它不存在,我希望从一个不存在的空间中获得一个空的空间

这样的欲望输出

From       To 
G5E8R3     Pcx
Q99MR6-3    
D3YVD3     Eno2
G3UZM2     Rhoj
Q1MWP8     Ehd4
D3Z2K3     Actg2
Q8BZM2     Anks1b
P09103     P4hb
Q9JJG0-3    
Q9R0Q6     Arpc1a
Q3UY11     Scamp1
Q8C3Z4     Prkar1a
Q3UVN6     Abi2
Q80U36     Dync1h1
Q9R1A1  

1 个答案:

答案 0 :(得分:0)

您的问题与撰写output.txt

的方式有关
  1. 您没有使用write权限打开它,这将导致IOError例外。
  2. 假设响应页面每次都包含2行输出。您之前应该通过打印响应来测试它,并且看到只有一行,以防转换失败。因此,您需要添加一个测试来检查它。
  3. 总之,请考虑下一个代码:

    import urllib
    import urllib2
    
    with open('/path/to/data.txt') as f:
        lines = f.read().splitlines()
    with open('/path/to/output.txt', 'w') as ff:
        url = 'http://www.uniprot.org/mapping/'
    
        ff.write("From\tTo\n")
        for genename_id in lines:
            params = {
                'from': 'ACC+ID',
                'to': 'GENENAME',
                'format': 'tab',
                'query': genename_id
            }
            data = urllib.urlencode(params)
            request = urllib2.Request(url, data)
            contact = "some@email.addrs"
            request.add_header('User-Agent', 'Python %s' % contact)
            response = urllib2.urlopen(request)
            page = response.read()
            ff.write('%s\n' % (page.splitlines()[1] if len(page.splitlines()) > 1 else genename_id))
    

    注意:

    • 我使用'w'作为open文件的output.txt函数的第二个参数,因此我将拥有写入权限。阅读open函数here
    • 我检查了响应的行长并打印了所需的数据。
    • 我删除了response.read
    • 的参数
    • 我将您撰写的print "From To"更改为ff.write("From\tTo\n"),因此它会显示在output.txt文件中。