【问题标题】:How to append data at specific indexes from one list to another empty list in python?如何将特定索引处的数据从一个列表附加到python中的另一个空列表?
【发布时间】:2017-06-02 07:34:41
【问题描述】:

我是 Python 编码的新手。 我想将列表“myarrayUrl”中 10 个特定索引处的值附加到另一个空列表“final”。索引的值存储在变量“ind_pos”中。 当我尝试附加这些值时,它们会存储在 csv 文件的同一行中,并且逗号放置在错误的位置。 最终列表中值的存储方式是这样的:

[array(['Hilton Garden Inn Dubai Al Muraqabat',
   'Al Deyafa Hotel Apartments',
   'Lapita, Dubai Parks and Resorts, Autograph Collection',
   'The Baron Hotel Apartments',
   'Park Inn by Radisson Hotel Apartments Al Rigga',
   'Kempinski Hotel Mall of the Emirates',
   'Premier Inn Dubai International Airport Hotel',
   'Al Kameelia Hotel Dubai', 'ABC Arabian Suites',
   'The Ritz-Carlton Residences, Dubai International Financial Centre'], 
  dtype='<U79')]

它们在 csv 文件中的显示方式是(同一行中的所有 10 个名称):

Abidos Hotel Apartment - Al BarshaMarriott Executive Apartments Dubai, Green CommunityPullman Jumeirah Lakes Towers Hotel &amp; ResidenceRamee Guestline Hotel Apartment 3The Ritz-Carlton Residences, Dubai International Financial CentreLapita, Dubai Parks and Resorts, Autograph CollectionAl Diar Hotel Apartments - Al BarshaDoubleTree by Hilton Hotel &amp; Residences Dubai - Al BarshaJW Marriott Marquis Hotel DubaiHabtoor Grand Resort, Autograph Collection, A Marriott Luxury &amp; Lifestyle Hotel

下面是我的代码:

import requests
import re
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
import csv
import numpy as np
from bs4 import BeautifulSoup

def connect(self):
    # Add certificate verification
    sock = socket.create_connection((self.host, self.port), self.timeout)

    # Wrap socket using verification with the root certs in
    # trusted_root_certs
    self.sock = ssl_wrap_socket(sock, self.key_file, self.cert_file,
                                cert_reqs=self.cert_reqs,
                                ca_certs=self.ca_certs,
                                server_hostname=self.host,
                                ssl_version=ssl.PROTOCOL_TLSv1)
offset = 0
url = 'https://www.tripadvisor.com/Hotels-g295424-oa' + str(offset) + '-Dubai_Emirate_of_Dubai-Hotels.html#EATERY_LIST_CONTENTS'
index_pages = ('http://www.tripadvisor.com/Hotels-g295424-oa{}-Dubai_Emirate_of_Dubai-Hotels.html#ACCOM_OVERVIEW'.format(i) for i in range(0, 540, 30))
urls = []
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")

for link in soup.find_all('a', {'last'}):
    page_number = link.get('data-page-number')
    last_offset = int(page_number) * 30
    print('last offset:', last_offset)

i=0
myList=[]
myUrl=[]
final=[]
for offset in range(0, last_offset, 30):
    print('--- page offset:', offset, '---')

    url = 'https://www.tripadvisor.com/Hotels-g295424-oa' + str(offset) + '-Dubai_Emirate_of_Dubai-Hotels.html#EATERY_LIST_CONTENTS'

    r = requests.get(url)
    soup = BeautifulSoup(r.text, "html.parser")

    for link in soup.find_all('a', {'property_title'}):
            iurl='https://www.tripadvisor.com/' + link.get('href')
            page = requests.get(iurl).text
            c=page.find("pool")
            myList.append(c)
            print (link.text)
            myUrl.append(link.text)
            print (page.find("pool") )


myarray = np.asarray(myList)   
myarrayUrl = np.asarray(myUrl)

ind_pos= np.argsort(myarray)[-10:]
print (myarrayUrl[ind_pos])
myarrayUrl.tolist();   

#for i in ind_pos:
   # T.append(L[i])
final.append(myarrayUrl[ind_pos])
print (final)

with open ('HotelReviewData.csv','w') as file:
    writer=csv.writer(file)
    for row in final:
        writer.writerow(row)

如何在最终列表中附加值,以便它们存储在 csv 文件的不同行中?

【问题讨论】:

    标签: python csv python-3.5


    【解决方案1】:

    您可以使用csvfile 打开文件。否则,您需要通过将代码的最后一行更改为:

    在每行之后显式附加一个行终止符:
    writer.writerow(row + '\r\n')
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2018-02-12
      • 2013-05-24
      相关资源
      最近更新 更多