2013-07-09 98 views
-1

我从我的网站拉地址,因为我没有以xml格式进行备份。我得到它的工作,除了现在我想用逗号分隔城市和国家。分割字符串错误:SyntaxError:无法分配给运算符

这里是我迄今为止

#!/usr/bin/env python2.7 

    from requests import get 
    from bs4 import BeautifulSoup as Soup 

    f = open('scraped.csv', 'wb') 
    f.write('"Name","URL","Address Line 1","new_line1","new_line2","Phone"\n') 

    rej = open('rejected.csv', 'wb') 
    rej.write('"ID"\n') 

    for i in xrange(1, 7397 + 1): 
     try: 
      url = "http://map.crossfit.com/affinfo.php?a={}&t=0".format(i) 
      text = get(url).text 
      splitted = [foo.replace('\n', ' ') for foo in text.split('<br />')] 
      soup = Soup(splitted[0]) 
      _, addr1, new_line1 = line1.split(',')[0], new_line2 = line1.split(',')[1] + ', ' +   line2, phone = [foo.replace('"', '""') for foo in splitted] 
      name = soup.text 
      url = soup.b.a['href'] 
      line = '"' + '","'.join((name, url, addr1, addr2, phone)) + '"' 
      print line 
      f.write((line + '\n').encode('utf8')) 
     except KeyboardInterrupt: 
      break 
     except: 
      print 'Rejected: {}'.format(i) 
      rej.write('{}\n'.format(i)) 

    f.close() 
    rej.close() 

我得到的错误是:

 File "/Users/Spencer/Downloads/xmlmaker.py", line 18 
     _, addr1, new_line1 = line1.split(',')[0], new_line2 = line1.split(',')[1] + ', ' + line2,   phone = [foo.replace('"', '""') for foo in splitted] 
    SyntaxError: can't assign to operator 

任何想法?我在看,看到也许有些拼写错误,但我只是不知道。

回答

4

放在单独的行这些声明:

_, addr1, new_line1 = line1.split(',')[0] 
new_line2 = line1.split(',')[1] + ', ' + line2 
phone = [foo.replace('"', '""') for foo in splitted] 

使用;对单行不,分开的语句。但它的可读性所以最好把它们放在单独的线路:

>>> x = 1; y = 2 
>>> x,y 
(1, 2) 

PEP-8

Compound statements (multiple statements on the same line) are generally discouraged.

+2

@downvoter解释你downvote? –

+0

在这里抓住吸管,但也许他们认为你的答案应该更强调分号通常是一个坏主意? (如果是这样,我完全不同意......但至少这是一个有点理性的解释;除了“我不喜欢Ashwini这个名字”或“我该如何工作”触控板?“) – abarnert

+0

谢谢!但我现在一切都被拒绝了。有任何想法吗?我是python的新手。 – Zargle

3

你不能把分配的值,即不能有到左边的表达式=(除了像a = b = c = 0这样的链式赋值外,每行只有一个=)。更换怪物线

_, addr1, new_line1 = line1.split(',')[0], new_line2 = line1.split(',')[1] + ', ' +   line2, phone = [foo.replace('"', '""') for foo in splitted] 

的东西,如

phone = [foo.replace('"', '""') for foo in splitted] 
new_line2 = line1.split(',')[1] + ', ' + line2 
_, addr1, new_line1 = line1.split(',')[0] 
+0

这是轻度误导 - 在链式加法的情况下,每行可以多于一个'=',如'a = b = c = 2 '。但我不认为这是答案的严重问题。 – abarnert

+0

@abarnert对,在答案中修正。您也可以在一行中将多个语句与';'连接在一起,为简单起见,这一点很简单。 – phihag

+0

同意,你不需要向人们解释分号,除非他们真的相关(他们很少) – abarnert