نحوه تبدیل استرینگ به لیست در پایتون
فرض کنید یک لیست را بهصورت رشته (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 را نیز بخوانید.




پاسخها