نحوه تبدیل استرینگ به لیست در پایتون

استرینگ به لیست پایتون

نحوه تبدیل استرینگ به لیست در پایتون

فرض کنید یک لیست را به‌صورت رشته (string) در دیتابیس ذخیره کرده‌اید و اکنون نیاز دارید آن استرینگ را دوباره به لیست تبدیل کنید تا بتوانید به مقادیر آن دسترسی داشته باشید.

روش اول: استفاده از ast.literal_eval

برای دسترسی به مقادیر لیست، ابتدا باید رشته را به لیست تبدیل کنید. می‌توانیم از تابع ast.literal_eval() برای ارزیابی امن رشته به‌عنوان یک عبارت پایتون استفاده کنیم.

رشته یا عبارت ارائه‌شده فقط می‌تواند شامل ساختارهای زیر باشد: اعداد، رشته‌ها، تاپل‌ها، لیست‌ها، دیکشنری‌ها، بولین‌ها و None. برای مثال:

import ast

fruits = "['apple', 'orange', 'banana']"
fruits = ast.literal_eval(fruits)
print(fruits[1], fruits[0])

در این کد، خط دوم یک لیست را به‌صورت رشته ذخیره کرده است. خط سوم به کمک ast.literal_eval() مقدار رشته را به لیست واقعی تبدیل می‌کند تا بتوان با ایندکس‌گذاری به عناصر آن دسترسی داشت.

روش دوم: استفاده از split برای رشته‌های ساده

اگر رشته شما فقط شامل مقادیر جدا شده با یک کاراکتر خاص (مثلا کاما) باشد، می‌توانید از متد split() استفاده کنید که سریع‌تر و ساده‌تر از ast.literal_eval() است:

fruits_str = "apple,orange,banana"
fruits_list = fruits_str.split(",")
print(fruits_list)

چرا از eval() معمولی استفاده نکنیم؟

تابع eval() استاندارد پایتون می‌تواند هر کد پایتونی را اجرا کند و در صورت پردازش داده‌های نامعتبر یا ناامن (مثلا ورودی کاربر)، خطر امنیتی جدی ایجاد می‌کند. به همین دلیل، ast.literal_eval() که فقط ساختارهای داده استاندارد را ارزیابی می‌کند، انتخاب امن‌تری برای این کار است.

برای مطالعه بیشتر درباره مستندات رسمی این تابع، صفحه مستندات پایتون درباره ast.literal_eval منبع خوبی است.

خطاهای رایج هنگام تبدیل استرینگ به لیست

اگر رشته ورودی فرمت معتبری نداشته باشد، مثلا کوتیشن‌ها بسته نشده باشند یا ساختار جدول درستی نداشته باشد، ast.literal_eval() با خطای SyntaxError یا ValueError متوقف می‌شود. به همین دلیل توصیه می‌شود این تابع را همیشه داخل بلوک try/except قرار دهید تا در صورت بروز خطا، برنامه شما کرش نکند:

try:
    fruits = ast.literal_eval(fruits_str)
except (SyntaxError, ValueError) as e:
    print("رشته ورودی معتبر نیست:", e)

برای مطالعه بیشتر درباره کار با پایگاه داده در پایتون، مقاله مقدمه‌ای بر پایگاه داده و SQLite را نیز بخوانید.

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *