Как преобразовать класс python «str» в класс «кортеж» без открывающих и закрывающих кавычек

Я пытаюсь получить кортеж, который в конечном итоге буду загружать в базу данных PostgreSQL в качестве массового обновления. Дайте мне знать, если я ошибаюсь или есть лучшие способы достичь моей цели.

Мой код выглядит следующим образом:


index = []
n = -1
for stock in stocklist[0:2000]:
    n += 1
    time.sleep(1)

    # RS_Rating code begins here
    data = get_history(stock, start=start_date, end=end_date)

    if not data.empty:
        row_count = 0
        day_prices = []
        for row in data.itertuples():
            row_data = "("  + str(row.Index) + ", '" + row.Symbol + "', " + str(row.Open) + ", " + str(row.High) + ", " + str(row.Low) + ", " + str(row.Last) + ')'
            
            if day_prices==[]:
                day_prices = row_data
            else:
                day_prices = day_prices + ", "+  row_data

            row_count = row_count + 1 # TO MAKE IT EASIER FOR TESTING WITH LIMITED CODE
            if row_count == 5:
                break

        # type(day_prices)
        # <class 'str'>
        
        day_prices_post = day_prices

        # WHAT I AM GETTING IS AS BELOW. 
        # ALL PERFECT BUT I NEED TO GET RID OF THE QUOTES " ... "

        day_prices_post = "(
            ('SBIN', 198.50, 202.50),
            ('RELIANCE', 1910.50, 1930.50),
            ('RELIANCE', 1925.60, 1933.00)
        )"
        
        # I NEED A TUPLE IN THIS LAYOUT
        # SIMILAR TO ABOVE BUT WITHOUT QUOTES " ... "
        day_prices_test = (
            ('SBIN', 198.50, 202.50),
            ('RELIANCE', 1910.50, 1930.50),
            ('RELIANCE', 1925.60, 1933.00)
        )
        
        # type(day_prices_test)
        # <class 'tuple'>

person Fred    schedule 03.11.2020    source источник
comment
Вы можете построить кортеж напрямую, вместо построения строки   -  person Dani Mesejo    schedule 03.11.2020


Ответы (1)


Вам не нужны строки для начала. Для каждой строки вы можете просто создать кортеж, как хотите, а затем добавить его в список. В конце вы можете использовать функцию кортежа для преобразования списка в кортеж:

index = []
n = -1
for stock in stocklist[0:2000]:
    n += 1
    time.sleep(1)

    # RS_Rating code begins here
    data = get_history(stock, start=start_date, end=end_date)

    if not data.empty:
        row_count = 0
        day_prices = []
        for row in data.itertuples():
            row_data = (row.Index , row.Symbol , row.Open , row.High, row.Low, row.Last)            
            day_prices.append(row_data)
            row_count += 1 # TO MAKE IT EASIER FOR TESTING WITH LIMITED CODE
            if row_count == 5:
                break
        day_prices = tuple(day_prices)
        # type(day_prices)
        # <class 'tuple'>
        

person Marko    schedule 03.11.2020
comment
Это работает идеально. Данные легко загружаются в Postgres. - person Fred; 03.11.2020