דילוג לתוכן

תכנות

387 נושאים 5.5k פוסטים

קטגוריות משנה


  • דיונים והצעות לבינה מלאכותית שיעזרו למפתחי תוכנה ומתכנתים

    240 נושאים
    4k פוסטים
    נחמן פלחנ

    לי עובד מעולה
    https://suno.com/song/803f31a9-12eb-4edd-bb3a-e11d010d8b89

  • 111 נושאים
    1k פוסטים
    ר

    תגובה: שאלה | דרך נוחה לשמור הגדרות משתמש בפיתון.

    רקע

    תוכנה שכתובה בפיתון הייתה זקוקה בדחיפות לדרך לשמור הגדרות והעדפות משתמש. כמובן שהייתי יכול לכתוב את כל ההגדרות לקובץ טקסט כלשהו, להמציא פורמט וליישם לו פרוטוקול. אבל כבר למדתי על בשרי בעבר לאחר שעמלתי חודשים על יישום פרוטוקולים חדשים פרי מוחי המבריק, שהיו כאלו שהקדימו אותי – שתלו קוד, ניכשו באגים, עקרו קוצים שיפרו ושיפצו, ואז הפיצו לאחרים חילם – או בקיצור – אל תמציא את הגלגל.

    בעקבות ניסיוני רב השנים ידעתי שיש תוכנות רבות שמשתמשות בקובץ בעל סיומת ini על מנת לכתוב לתוכו את ההעדפות, ההגדרות וכל שאר ירקות התלויים במשתמש ספציפי. לאחר שלא ידעתי בעצמי איך משתמשים בקבצים האלו בפיתון, שאלתי שאלה בפורום, אך לאחר שהתגובה היחידה לשאלה שלי נמחקה עוד לפני שעיניי זכו לשזוף אותה, ניסיתי לחפור בעצמי ברחבי המרשתת למרות שאנגלית היא לא הצד החזק שלי, ואני וגוגל טרנסלייט לא מסתדרים במיוחד.

    והנה מצאתי ספריית פיתון שיודעת להתעסק עם קבצים מהסוג הנ"ל. ולא סתם ספרייה, היא מובנת בתוך פיתון ולא צריך להתקין אותה. היות ולא מצאתי שום מדריך לשימוש בספרייה הזאת בעברית סטנדרטית, נאלצתי לכתוב אותה בעצמי, ואז גמרתי אומר לפרסם אותה כי אני מעריץ של קוד פתוח... המדריך הוא בסיסי בלבד ואינו מתיימר להקיף את כל הארגומנטים והמתודות שיש לספרייה להציע.

    מבנה קובץ תצורה ini

    המבנה של הקובץ הוא בסיסי ופשוט. הקובץ מחולק לפסקאות ולכל פסקה יש כותרת – הכותרת נכתבת בין סוגריים מרובעות. לאחר הכותרת ישנם זוגות של מפתחות וערכים (Keys and values) כשבין המפתח והערך יש תו מפריד (בדרך כלל "=" לפעמים ":").

    [paths] user = user/path log = log/path language_files = language/files/path [settings] language = Hebrew background = dark

    אם נשווה את זה לפיתון זה ייראה לנו כמו מילון (Dictionary) מקונן, כלומר, מילון ראשי שמכיל מפתחות שהן הכותרות של הפסקאות, ולכל מפתח כזה יש ערך שהוא מילון בעצמו. לא פלא שכך בחרו המפתחים של הספרייה להתייחס לקבצי ה-ini בבואם לכתוב קוד שיפענח אותם.

    יצירת קובץ תצורה באמצעות פיתון

    ראשית נייבא את הספרייה configparser בעצם, אנחנו זקוקים למודול ConfigParser בלבד, לכן נייבא רק אותו כדי להקל על העבודה. לאחר מכן נגדיר את המשתנה שיהיה מעתה "משתנה התצורה שלנו".

    from configparser import ConfigParser config = ConfigParser()

    עכשיו נוכל להוסיף למשתנה הזה צמדים של מפתחות וערכים, כשהם נמצאים מתחת לכותרת. לדוגמא:

    config['paths'] = { 'user': 'user/path', 'log': 'log/path', 'language_files': 'language/files/path' }

    שימו לב שאנחנו ניגשים למפתח paths במילון שהוא הכותרת ומגדירים תחתיו מילון של מפתחות וערכים.
    ניתן גם להגדיר תחילה את הכותרת כמפתח שהערך שלו הוא מילון ריק, ולאחר מכן למלא את המילון במפתחות וערכים:

    config['settings'] = {} config['settings']['language'] = 'Hebrew' config['settings']['background'] = 'dark'

    שימו לב, כל הערכים שהגדרנו עד כה, אינם מופיעים בשום קובץ. את כל הערכים הכנסנו לתוך משתנה שהוא בעצם class שיודע לתרגם פיתון לקובץ תצורה תקין.

    אז איך אנחנו כותבים את כל ההגדרות שלנו לקובץ, כדי שהם יישמרו גם לאחר שהסקריפט שלנו יסיים את ריצתו? לשם כך נכתבה המתודה write שאליה נעביר אובייקט קובץ כשהוא פתוח במצב כתיבה:

    with open('config.ini', 'w') as file: config.write(file)

    לאחר שנריץ את הסקריפט הזה נוכל לחזות בקובץ הנוצר:

    [paths] user = user/path log = log/path language_files = language/files/path [settings] language = Hebrew background = dark

    חשוב לשים לב, לרוב פשטותו, קובץ תצורה שומר את כל הנכתב בו כטקסט פשוט, הוא לא תומך בשום פורמט אחר. כך שתוכלו לכתוב בפיתון ערכים מסוג int או bool אבל פיתון ימיר אותם לטקסט בבואו לכתוב אותם לתוך קובץ התצורה.

    סקריפט: config['different_type'] = { 'int': 50, 'float': 1.45, 'bool': False } קובץ תצורה: [different_type] int = 50 float = 1.45 bool = False

    לכן כשאתם משתמשים בקבצי תצורה מסוג זה עליכם לדאוג להמיר את סוגי הערכים בחזרה לפני שאתם מבצעים עליהם מניפולציות.

    הערה נוספת: המפתחות בקובץ התצורה אינן תלויי ראשיות (כלומר אין הבדל בין אותיות קטנות לגדולות) כך שגם אם תכתבו את המפתח בסקריפט באותיות גדולות, המפתחות בקובץ תמיד ייכתבו באותיות קטנות. (זה נכון רק לגבי המפתחות – הכותרות והערכים כן תלויי ראשיות).

    קריאת קובץ ושינוי שלו

    עבור קריאת קובץ תצורה ושינוי שלו נשתמש במתודה rade ונספק לה את הנתיב לקובץ שאותו נרצה לקרוא:

    from configparser import ConfigParser config = ConfigParser() config.read('config.ini')

    לאחר שקראנו את הקובץ הוא נמצא בתוך המשתנה שלנו, ואז נוכל לגשת למפתחות ולערכים שנמצאים בתוכו, לקרוא אותם ולשנות אותם.
    הדרך הפשוטה ביותר לעשות זאת היא באמצעות כתיבת שם הכותרת והמפתח:

    print(config['paths']['user']) # user/path

    אבל באופן זה אם הערך לא נמצא פיתון יחזיר לנו שגיאת KeyError (מפתח לא נמצא). אנו יכולים להשתמש במתודה get שמאפשרת לקבל את הערך, ובמקרה שהערך לא נמצא היא תחזיר None או שנוכל לספק בעצמנו ערך ברירת מחדל למקרה שהערך לא יימצא:

    print(config.get('paths', 'user', fallback='C:/Users/USER/'))

    נוכל לשלוף את שמות כל הכותרות על ידי המתודה sections ולאחר שיש לנו את שמות הכותרות נוכל לשלוף מקטעים שלמים כמילונים:

    print(config.sections()) # ['paths', 'settings'] print(dict(config['paths'])) # {'user': 'user/path', 'log': 'log/path', 'language_files': 'language/files/path'}

    אם נרצה להוסיף שורה חדשה תחת כותרת קיימת, ניגש אל הכותרת, ולאחר מכן נוסיף את המפתח בתוך סוגריים מרובעות ונוסיף לתוכו את הערך. אפשר גם להוסיף מקטעים חדשים לגמרי.

    # New value config['paths']['icon'] = 'icon/path' # New section config['Usage data'] = { 'Days': 12, 'Hours': 8 }

    אם נרצה לשנות ערך קיים, נוכל לגשת אליו על ידי הכותרת והמפתח שלו:

    print(config['paths']['user']) # user/path config['paths']['user'] = 'user/new/path' print(config['paths']['user']) # user/new/path

    אבל שימו לב, כל השינויים שנעשים אינם נשמרים אל הקובץ הם שמורים לעת עתה רק בתוך המשתנה שלנו, כשנרצה לשמור את השינויים לקובץ נקרא שוב למתודה writh ונעביר לה את הקובץ שלנו כשהוא פתוח במוד כתיבה:

    with open('config.ini', 'w') as file: config.write(file)

    והנה קובץ התצורה המעודכן שלנו:

    [paths] user = user/new/path log = log/path language_files = language/files/path icon = icon/path [settings] language = Hebrew background = dark [Usage data] days = 12 hours = 8

    בהצלחה.

  • 8 נושאים
    70 פוסטים
    mefateachM

    @אבי_770 אני צריך לקליינט לא לבוט, אני רוצה לקבל צ'אטים מטלגרם ולכן זה לא עוזר לי

  • 6 נושאים
    56 פוסטים
    מ

    @trhtkgsh
    אני חושב בקול (לא ניסיתי)
    אולי הבעיה (הזמן שלוקח) הוא בהמרה מאותיות עבריות
    אולי חיפוש בhex ואולי אפי Bin (שלא צריך המרה) יהי יותר מהיר

  • 8 נושאים
    60 פוסטים
    מ

    @מתכנתת-מנסה כתב בעזרה | אתר עובד לאט:

    מה יכול להיות?

    לא בהכרח שהבעיה בקוד
    יש מצב שהבעיה בסינון

  • 10 נושאים
    116 פוסטים
    I

    @Whenever תודה רבה זה היה הבעיה
    נפתר

  • המלצה | אתר שנותן רקע על שפות תכנות

    הועבר
    1
    8 הצבעות
    1 פוסטים
    210 צפיות
    אין תגובות
  • מדריך | הכנת סביבת עבודה (IDE) לכתיבת קוד

    5
    27 הצבעות
    5 פוסטים
    2k צפיות
    אלישיא
    הגדרות מותאמות

    פרופילים:
    ניתן להגדיר פרופילי משתמש ב-VS Code כך שבעבודה יהיה לכם פרופיל עם הגדרות ותוספים וקיצורי דרך אלו, ובבית יהיה לכם פרופיל שונה לחלוטין.
    כמו כן אם אתם מפתחים בכמה שפות במקביל, תוכלו ליצור פרופיל לפייתון פרופיל לפולסטאק ופרופיל ל-C# כשלכל אחד יש את התוספים הייחודיים שלו ואת קיצורי המקשים וההגדרות ששייכים רק לשפה הזאת.
    ב-VS Code הכניסו בימים האחרונים הרבה פיצ'רים לניהול והוספת הגדרות מפרופיל לפרופיל, והוספת תוסף לכל הפרופילים בבת אחת.
    בעת יצירת הפרופיל תוכלו ליצור מפרופיל קיים, ואם כן, אילו הגדרות או תוספים תרצו להעתיק מהם, או ליצור פרופיל ריק עם הגדרות ברירת מחדל.
    אני ממליץ ליצור פרופיל דיפולטי עם ההגדרות והערכת נושא והתוספים הכלליים שנוח לכם, וממנו ליצור את שאר הפרופילים בהמשך.

    נגדיר את Auto Save בהגדרות VS Code ע"מ שהקובץ ישמר אוטומטית, כך תחסכו כאב ראש במידה והמחשב ייכבה בפתאומיות, כמובן שלפעמים זה יכול לעצבן, לדוגמא אם השרת עושה hot reload אחרי כל שמירה, שאז השרת לא מפסיק להטעין את עצמו.

    האם גם אתכם מעצבן החלונית שקופץ בכל מעבר עכבר על כל פונקציה או קלאס שכתבתם ב-VS Code?

    77679ae8-836d-4da3-acf5-71f9c793f7fd-image.png

    אם זה מפריע לכם נוכל להגדיר שמשך זמן ההשהיה עד שההודעה יופיע, יהיה יותר זמן, וכך רק אם באמת נרצה לצפות בחלונית נשהה על האלמנט הרצוי עד שיופיע ההודעה.
    ננווט ל:

    File > Preferences > Settings

    או שפשוט נלחץ על Ctrl + , (שימו לב לשפת המקלדת, הפסיק ממוקם במקום שונה בעברית).

    נגיע להגדרות VS Code.

    בשורת החיפוש נקליד editor hover delay

    ואז נגדיר אותו ל-3000 לדוגמא.
    23f68dcf-d71f-4828-bbb0-b759dd78ac7b-image.png

    כך יוגדר שרק בעת השהייה של 3000ms על האלמנט, תופיע ההודעה.

    נוכל גם להשבית את התכונה לחלוטין (לא הכי מומלץ) נכתוב בהגדרות, editor hover: enabled ונוריד את הסימון בתיבת הסימון.

    כאן תוכלו לראות תוספים והמלצות עליהם.

    כשאתם מתחילים להקליד קוד, VS Code מציע השלמות מילים אוטומטיות. יש שתי אפשרויות מרכזיות להתאמת ההתנהגות הזו אם אתם רוצים שהעורך ישלים מילים בצורה חכמה לפי השימוש הנפוץ שלכם.

    השלמה לפי שימוש אחרון:
    לדוגמה, אם אתם מתחילים לכתוב co, יופיע תפריט עם הצעות השלמה. ייתכן שתרצו לבחור את המילה const, אך היא מופיעה באמצע הרשימה ולא בראש. כדי להבטיח שהאפשרויות האחרונות שהשתמשתם בהן יופיעו למעלה, הגדירו את האפשרות הבאה:

    editor.suggestSelection

    לערך recentlyUsed. כך, העורך יתעדף מילים שבהן השתמשתם לאחרונה.

    השלמה לפי קיצורים מותאמים:
    אם תרצו שהעורך יזהה קיצורים שלכם להשלמה מהירה יותר, למשל – אם תתחילו לכתוב con והעורך ישלים את זה ל-console, ואם תכתבו רק co הוא ישלים ל-const, בחרו בערך: recentlyUsedByPrefix
    כך תוכלו לשלוט טוב יותר על ההשלמות המוצעות בהתאם להעדפות ולצורת הכתיבה שלכם.

  • 8 הצבעות
    2 פוסטים
    442 צפיות
    אין תגובות
  • הסבר | הצטרפות לקבוצת תכנות

    1
    0 הצבעות
    1 פוסטים
    556 צפיות
    אין תגובות