از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
رشته های Datetime را با parsedatetime در پایتون تجزیه کنید
سرفصلهای مطلب
معرفی
در این آموزش نگاهی به این خواهیم داشت روش تجزیه Datetime با parsedatetime
در پایتون.
برای استفاده از parsedatetime
بسته ای که ابتدا باید با استفاده از آن نصب کنیم pip:
$ pip install parsedatetime
باید pip install parsedatetime
شکست، بسته نیز منبع باز و در دسترس است روی GitHub.
رشته را به پایتون تبدیل کنید زمان قرار شی با parsedatetime
اولین و رایج ترین روش استفاده parsedatetime
تجزیه یک رشته به a است datetime
هدف – شی. اول، شما می خواهید import را parsedatetime
کتابخانه، و instantiate a Calendar
شی، که ورودی، تجزیه و دستکاری واقعی تاریخ ها را انجام می دهد:
import parsedatetime
calendar = parsedatetime.Calendar()
اکنون می توانیم با آن تماس بگیریم parse()
روش از calendar
مثال با یک رشته به عنوان آرگومان. میتوانید رشتههای منظم با قالببندی تاریخ، مانند 1-1-2021
یا ارزش های قابل خواندن برای انسان مانند tomorrow
، yesterday
، next year
، last week
، lunch tomorrow
و غیره… همچنین می توانیم استفاده کنیم 'End of Day'
سازه ها با tomorrow eod
بیایید یک تاریخ زمان و رشته قابل خواندن توسط انسان را به a تبدیل کنیم datetime
با استفاده از شی parsedatetime
:
import parsedatetime
from datetime import datetime
calendar = parsedatetime.Calendar()
print(calendar.parse('tomorrow'))
print(calendar.parse('1-1-2021'))
این منجر به دو تاپل چاپی می شود:
(time.struct_time(tm_year=2021, tm_mon=3, tm_mday=19, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=78, tm_isdst=-1), 1)
(time.struct_time(tm_year=2021, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=5, tm_sec=14, tm_wday=3, tm_yday=77, tm_isdst=0), 1)
این خیلی برای انسان قابل خواندن نیست… تاپل برگشتی برای هر تبدیل شامل این است struct_time
شی که حاوی اطلاعاتی مانند سال، ماه، روز ماه و غیره است. مقدار دوم the است کد وضعیت – یک عدد صحیح که روش تبدیل را نشان می دهد.
0
به معنی تجزیه ناموفق، 1
به معنی تجزیه موفق به a date
، 2
به معنی تجزیه موفق به a time
و 3
به معنی تجزیه موفق به a datetime
.
بیایید این خروجی را تجزیه کنیم:
print(calendar.parse('tomorrow')(0).tm_mday)
print(calendar.parse('1-1-2021')(0).tm_mday)
این کد نتیجه می دهد:
19
1
سپس دوباره، ما فقط دریافت می کنیم روز ماه اینجا معمولاً ما می خواهیم چیزی شبیه به a خروجی بگیریم YYYY-mm-dd HH:mm:ss
قالب یا هر گونه تغییری از آن.
خوشبختانه، ما به راحتی می توانیم از آن استفاده کنیم time.struct_time
نتیجه و یک پایتون معمولی تولید کنید datetime
با آن:
import parsedatetime
from datetime import datetime
calendar = parsedatetime.Calendar()
time_structure_tomorrow, parse_status_tomorrow = calendar.parse('tomorrow')
time_structure_2021, parse_status_2021 = calendar.parse('1-1-2021')
print(datetime(*time_structure_tomorrow(:6)))
print(datetime(*time_structure_2021(:6)))
این datetime()
سازنده به تمام اطلاعات ساختار زمانی ارائه شده توسط سازنده نیاز ندارد parsedatetime
، بنابراین ما آن را برش دادیم.
این کد نتیجه می دهد:
2021-03-19 09:00:00
2021-01-01 18:11:06
به خاطر داشته باشید که datetime
روی اول ژانویه زمان اعدام را در نظر گرفت.
مدیریت مناطق زمانی
گاهی اوقات، برنامه شما ممکن است مجبور باشد مناطق زمانی کاربران نهایی شما را در نظر بگیرد. برای پشتیبانی منطقه زمانی، ما معمولاً از پیتز بسته، با این حال، شما می توانید از بسته های دیگر نیز استفاده کنید.
نصب کنیم پیتز از طریق pip
:
$ pip install pytz
حالا، ما می توانیم import را parsedatetime
و pytz
بسته بندی در یک اسکریپت، و ایجاد یک استاندارد Calendar
نمونه، مثال:
import parsedatetime
import pytz
from pytz import timezone
calendar = parsedatetime.Calendar()
بیایید با چاپ کردن، نگاهی به مناطق زمانی پشتیبانی شده بیندازیم all_timezones
:
print(pytz.all_timezones)
این کد منجر به لیست عظیمی از تمام مناطق زمانی موجود می شود:
('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', ...)
بیایید یکی از اینها را انتخاب کنیم، مانند اولی، و آن را به عنوان ارسال کنیم tzinfo
استدلال از Calendar
‘s parseDT()
تابع. به غیر از آن، ما می خواهیم یک را عرضه کنیم datetimeString
آرگومان، که رشته واقعی ای است که می خواهیم تجزیه کنیم:
datetime_object, status = calendar.parseDT(datetimeString='tomorrow', tzinfo=timezone('Africa/Abidjan'))
این روش یک تاپل از a را برمی گرداند Datetime
شی و کد وضعیت تبدیل که یک عدد صحیح است – 1
به معنی “موفق”، و 0
به معنی “ناموفق”.
بریم جلو و print را datetime_object
:
print(datetime_object)
این کد نتیجه می دهد:
2021-03-16 09:00:00+00:00
Calendar.parseDate()
در حالی که Calendar.parse()
یک روش تجزیه در سطح عمومی است که یک تاپل را با کد وضعیت و time.struct_time
، parseDate()
متد روشی است که به تاریخ های رشته ای کوتاه اختصاص داده شده است و به سادگی یک نتیجه قابل خواندن توسط انسان را برمی گرداند:
import parsedatetime
calendar = parsedatetime.Calendar()
result = calendar.parseDate('5/5/91')
print(result)
این result
در حال حاضر شامل محاسبه شده است struct_time
ارزش تاریخی که در آن گذشتیم:
(1991, 5, 5, 14, 31, 18, 0, 74, 0)
اما، وقتی می خواهیم پنجم می 2077 را تجزیه کنیم، چه کار می کنیم؟ می توانیم سعی کنیم کد زیر را اجرا کنیم:
import parsedatetime
calendar = parsedatetime.Calendar()
result = calendar.parseDate('5/5/77')
print(result)
با این حال، این کد منجر به:
(1977, 5, 5, 14, 36, 21, 0, 74, 0)
Calendar.parseDate()
تاریخ کوتاه را برای واقع بینانه تر اشتباه گرفت 1977
. ما می توانیم این را به دو روش حل کنیم:
- به سادگی سال کامل را مشخص کنید –
2077
:
import parsedatetime
calendar = parsedatetime.Calendar()
result = calendar.parseDate('5/5/2077')
print(result)
import parsedatetime
constants = parsedatetime.Constants()
constants.BirthdayEpoch = 80
calendar = parsedatetime.Calendar(constants)
result = calendar.parseDate('5/5/77')
print(result)
این کد نتیجه خواهد داد:
(2077, 5, 5, 14, 39, 47, 0, 74, 0)
می توانید به محتویات آن دسترسی داشته باشید parsedatetime
کتابخانه از طریق Constants
هدف – شی. در اینجا، ما را تنظیم کرده ایم BirthdayEpoch
به 80
.
BirthdayEpoch
کنترل می کند که بسته چگونه سال های دو رقمی را کنترل می کند، مانند 77
. اگر مقدار تجزیه شده کمتر از مقداری باشد که برای آن تعیین کرده ایم BirthdayEpoch
– مقدار تجزیه شده را به آن اضافه می کند 2000
. از آنجایی که ما آن را تنظیم کرده ایم BirthdayEpoch
به 80
، و تجزیه شد 77
، آن را به 2077
.
در غیر این صورت، مقدار تجزیه شده را به آن اضافه می کند 1900
.
Calendar.parseDateText()
جایگزین دیگری برای مقابله با مسئله تاریخ های کوتاه اشتباه، استفاده از تاریخ های بلند است. برای تاریخ های طولانی، می توانید از آن استفاده کنید parseDateText()
روش:
import parsedatetime
result2 = calendar.parseDateText('May 5th, 1991')
print(result2)
این کد نتیجه خواهد داد:
(1991, 5, 5, 14, 31, 46, 0, 74, 0)
استفاده از Locales
در نهایت می توانیم استفاده کنیم parsedatetime
با اطلاعات محلی. اطلاعات محلی از هر دو می آید PyICU یا قبلا استفاده شده Constants
کلاس
این Constants
کلاس داخلی دارای ویژگی های زیادی است، درست مانند BirthdayEpoch
صفت. دو تا از اینها هستند localeID
و userPyICU
.
بیایید سعی کنیم تنظیم کنیم localeId
به اسپانیایی و تنظیم کنید usePyICU
به False
از آنجایی که ما از آن استفاده نمی کنیم:
import parsedatetime
constants = parsedatetime.Constants(localeID='es', usePyICU=False)
calendar = parsedatetime.Calendar(constants)
result, code = calendar.parse('Marzo 28')
print(result)
این نتیجه در:
(time.struct_time(tm_year=2021, tm_mon=3, tm_mday=28, tm_hour=15, tm_min=0, tm_sec=5, tm_wday=0, tm_yday=74, tm_isdst=0), 1)
متد a را برمی گرداند struct_time
، بنابراین به راحتی می توانیم آن را به a تبدیل کنیم datetime
:
print(datetime(*result(:6)))
این نتیجه در:
2021-03-28 22:08:40
نتیجه
در این آموزش، ما چندین روش را برای تجزیه تاریخ با استفاده از parsedatetime
بسته در پایتون
ما در مورد تبدیل بین رشته ها و datetime
اشیاء از طریق parsedatetime
، و همچنین مدیریت مناطق زمانی با pytz
و مناطق، با استفاده از Constants
نمونه ای از parsedatetime
کتابخانه
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-11 16:50:04