وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

رشته های Datetime را با parsedatetime در پایتون تجزیه کنید

0 19
زمان لازم برای مطالعه: 4 دقیقه


معرفی

در این آموزش نگاهی به این خواهیم داشت روش تجزیه 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید