在python中按所需格式排列列表的字符串

2024-09-30 06:15:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想加入下面我已经做过的事情

^{pr2}$

得到了以下结果

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都要编写适用于上面所有列表的代码


Tags: nonameinfourl地址htmlresultextra
3条回答

你可以这样做:

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'

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

^{pr2}$

这样的怎么样:

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

屈服:

^{pr2}$

更新

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

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在updatepost中提供的4个测试字符串一起工作

更新2OP更改问题,使“Mr”不在列表中

此代码将检测Mr是否在列表中,并将其移到前面,如上所示。它还将检测它是否不在列表中,并避免出现索引越界的情况。参见下面的输出。在

测试串:

^{4}$

代码:

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
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

相关问题 更多 >

    热门问题