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が、通常、名前はどこの連絡先でもドアまたは家の番号の前にある必要がありますか?したがって、リストに参加した後の文字列の数に関係なく、i開始時に名前を取得する必要がありますが、これを行う方法はありますか?誰かがこれを行う方法を教えてもらえますか?

編集されたコード:

現在、一度に4つの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'

編集:あなたのコメントに続いて、名前がランク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

- 更新-

これにより、元のリストの任意の場所で「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による更新投稿で提供される4つのテスト文字列で機能します

--UPDATE 2 OPは、「Mr」がリストに含まれないように質問を変更します-

このコードは、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 に答える