3

实际上我正在使用scrapy解析一些html页面,我使用了xpath并从一些html标签中获取了一些地址,结果如下所示

result = ["Hno 4-50, Plot No 301, Swathi Pooja Homes,Beside Rajadhani Theater, Vikas Nagar,Dilsukhnagar,Hyderabad","Mr Sravan"]

我想加入字符串,所以我在下面做了

final_result = ','.join(result)

并得到以下结果

final_result = "Hno 4-50, Plot No 301, Swathi Pooja Homes,Beside Rajadhani Theater, Vikas Nagar,Dilsukhnagar,Hyderabad,Mr Sravan"

在这里,我们可以观察到final_result(地址)Mr Sravan中的名称在末尾,但通常名称应该在任何地方的任何联系人中的门或门牌号码之前,对吗?所以无论加入后列表中的字符串数量如何,我应该在开始时得到名字,有什么办法可以做到这一点?谁能告诉我该怎么做?

编辑代码:

目前我一次解析四个 url,所以当我使用 xpath(或相关)并从不同的 url 获取地址并且结果(例如)如下每个 url

final_result = ['Addess_2','Newyork', 'Mr T.Jamal(Name)']
               ['Mr T. Jamal(Name)', 'Addres_1','Extra info'] 
               ['Addres_3','Mr T. Jamal(Name)','Extra info','Related scope'] 
               ['Addres_4','Extra info','Mr T. Jamal(Name)','Related info'] 
               ['Addres_5','Extra info','Related info']  # No name
               ['Addres_6','Extra info1','Related info1']  # No name

在这里,对于解析地址中的所有 url,想要编写适用于上述所有列表的代码

4

3 回答 3

2

你可以这样做:

final_result = ','.join(result[-1:] + result[:-1])


>>> 'Mr Sravan,Hno 4-50, Plot No 301, Swathi Pooja Homes,Beside Rajadhani Theater, Vikas Nagar,Dilsukhnagar,Hyderabad'

编辑:根据您的评论,如果您知道该名称位于 rank i,则可以这样做:

result = ["is", "now", "the name", "at", "first", "place", ":)"]
i = 2
' '.join(result[i:i+1] + result[:i] + result[i+1:])
'the name is now at first place :)'
于 2012-07-26T12:45:39.823 回答
2

像这样的东西怎么样:

  final_result = result[-1] + ', ' + ''.join(result[:-1])

产生:

Mr Sravan, Hno 4-50, Plot No 301, Swathi Pooja Homes,Beside Rajadhani Theater, Vikas Nagar,Dilsukhnagar,Hyderabad

-- 更新--

这应该可以在原始列表中的任何位置找到“先生”字符串,并使其按您想要的方式工作。

rs = ','.join(result).split(',')
idx = [i for i,j in enumerate(rs) if j.strip().startswith('Mr')][0]
final_result = (rs[idx] +',' + ','.join(rs[1:idx] + rs[idx+1:])).strip()
print final_result

这适用于 OP 在更新帖子中提供的 4 个测试字符串

-- UPDATE 2 OP 更改了问题,因此“先生”可能不在列表中 --

此代码将检测 Mr 是否在列表中并将其移至前面。它还将检测它是否不在列表中并避免索引超出范围的情况。请参阅下面的输出。

测试字符串:

result = ['Addres_4','Extra info','Mr T. Jamal(Name)','Related info'] 
result = ['Addres_4','Extra info','T. Jamal(Name)','Related info'] 

代码:

rs = ','.join(result).split(',')
idx = [i for i,j in enumerate(rs) if j.strip().startswith('Mr')]

if len(idx) == 1:  # we found "Mr" in the list
    idx = idx[0]
    final_result = (rs[idx] +',' + ','.join(rs[1:idx] + rs[idx+1:])).strip()
else: # We didn't find "Mr" in the list .. adjust output to your needs
    final_result = (','.join(rs).strip())

print final_result

分别产生:

Mr T. Jamal(Name),Extra info,Related info
Addres_4,Extra info,T. Jamal(Name),Related info
于 2012-07-26T12:45:57.083 回答
1
def name_first(alist):
    """Get the part of the list that begins with 'Mr', then the rest."""
    for i, el in enumerate(alist):
        if el.startswith('Mr'):
            yield alist.pop(i)
            break
    for el in alist:
        yield el
于 2012-07-26T12:57:25.957 回答