Как записать names и prices в отдельные столбцы?

import csv
import requests
from bs4 import BeautifulSoup

url = 'https://www.alta.ru/currency/'

r = requests.get(url)

soup = BeautifulSoup(r.text, 'lxml')

name = soup.find_all('td',class_ = 't-left')
price = soup.find_all(class_ = 't-right')

with open('data.csv', 'w', newline = '') as file:
    writer = csv.writer(file)
    for names in name:
        writer.writerow([names.text])
    for prices in price:
        writer.writerow([prices.text])

Ответы (2 шт):

Автор решения: floydya

Нужно просто упаковать имена и цены, а потом скормить элемент:

names = soup.find_all('td', class_='t-left')
prices = soup.find_all(class_='t-right')

with open('data.csv', 'w', newline = '') as file:
    writer = csv.writer(file)
    # Тут мы упаковываем имена и цены в виде кортежа - (имя, цена)
    names_and_prices = zip([name.text for name in names], [price.text for price in prices])
    # Каждый упакованный элемент - записываем
    for row in names_and_prices:
        writer.writerow(row)
→ Ссылка
Автор решения: SergFSM

если использовать библиотеку pandas то получится примерно так (этот код не тестировался):

import pandas as pd

df = pd.DataFrame()
df['name'] = [n.text for n in soup.find_all('td', class_='t-left')]
df['price'] = [p.text for p in soup.find_all(class_='t-right')]

df.to_csv('data.csv', index=False)
→ Ссылка