#python
#python
Вопрос:
У меня есть следующая часть списка, полученная из файла csv (csv, загруженного с Shopify).
['#1762', 'lukg@ttt.com.au', 'paid', '2020-08-20 09:08:13 1000', 'fulfilled',
'2020-08-20 09:27:27 1000', 'yes', 'AUD', '273.90', '0.00', '24.90', '273.90',
'""', '0.00', 'Free shipping to your address', '2020-08-20 08:36:29 1000',
'1', 'Standard Hand Sanitiser Station - Free-Standing - Black', '273.90',
'328.90', 'EC-HSS-FS-S-A-B', 'true', 'true', 'fulfilled', 'Luke Smith',
'211 Riond Rd', '211 Riond Rd', '""', '""', 'Riond', "'5033", 'SA', 'AU',
'0439 082 558', 'Luke Smith', '211 Riond Rd', '211 Riond Rd', '""', '""',
'Riond', "'5033", 'SA', 'AU', '043*******58', '""', '""', '',
'Shopify Payments', 'c1462*******524.1', '0.00', 'Expo Lite', '0.00', '', '',
'', '264*******220', '""', 'Low', 'web', '0.00', 'GST 10%', '24.90', '', '',
'', '', '', '', '', '', '', '']
Есть ли эффективный способ узнать имя клиента, адрес электронной почты и приобретенный продукт?
Проблема в том, что в файле .csv есть несколько похожих списков, но если я использую что-то вроде этого
email = list[1]
name = list[24]
product = list[17]
не та информация, которая получена из списка, а иногда и из его элемента до или после. Когда я проверяю csv-файл, вся информация структурирована правильно, и при чтении индекс отсутствует.
Извините, если вопрос глупый, я не могу обмозговать это. : (
Комментарии:
1. Если все они расположены в столбцах, они должны находиться в одном и том же месте каждый раз.
2. Как вы читаете csv? Вы используете модуль csv или написали свой собственный код?
3. Также может быть, что в некоторых строках есть запятые. Если возможно, было бы лучше сохранить как файл, разделенный каналами
4. Используете ли вы для этого функцию экспорта заказов в Shopify? Я могу обновить пример, чтобы отразить это, если вам нужно, или вы можете просто добавить нужные вам заголовки.
5. Используйте модуль csv. Это правильно обработает случай, когда у вас есть запятые в ваших данных. Это объясняет, почему вы получаете требуемые поля, отображаемые с разными индексами.
Ответ №1:
Ниже приведен пример того, как это сделать, используя Shopify product_template.csv в качестве примера. Для этого используется DictReader и явные разделители символ кавычки.
import csv
with open('product_template.csv') as infile:
reader = csv.DictReader(infile, delimiter=',', quotechar='"')
for row in reader:
print(row['Handle'], row['Vendor'])
Ответ №2:
Если элементы всегда находятся в одной и той же позиции индекса в списке, очень хорошим способом было бы использовать operator.itemgetter()
для создания функции, которая извлекает все элементы одновременно. Это эффективно в том смысле, что настройку нужно выполнить только один раз, и это реализовано в высокооптимизированном встроенном модуле. Вот что я имею в виду:
from operator import itemgetter
data = ['#1762', 'lukg@ttt.com.au', 'paid', '2020-08-20 09:08:13 1000', 'fulfilled',
'2020-08-20 09:27:27 1000', 'yes', 'AUD', '273.90', '0.00', '24.90', '273.90',
'""', '0.00', 'Free shipping to your address', '2020-08-20 08:36:29 1000',
'1', 'Standard Hand Sanitiser Station - Free-Standing - Black', '273.90',
'328.90', 'EC-HSS-FS-S-A-B', 'true', 'true', 'fulfilled', 'Luke Smith',
'211 Riond Rd', '211 Riond Rd', '""', '""', 'Riond', "'5033", 'SA', 'AU',
'0439 082 558', 'Luke Smith', '211 Riond Rd', '211 Riond Rd', '""', '""',
'Riond', "'5033", 'SA', 'AU', '043*******58', '""', '""', '',
'Shopify Payments', 'c1462*******524.1', '0.00', 'Expo Lite', '0.00', '', '',
'', '264*******220', '""', 'Low', 'web', '0.00', 'GST 10%', '24.90', '', '',
'', '', '', '', '', '', '', '']
data_getter = itemgetter(1, 24, 17) # Create function.
email, name, product = data_getter(data) # Use it.
print(email, name, product, sep=',') # Display results.
Вывод:
lukg@ttt.com.au,Luke Smith,Standard Hand Sanitiser Station - Free-Standing - Black
Комментарии:
1. Спасибо! Я не знал о таком способе.