לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 31-08-2017, 21:02
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי maorhag שמתחילה ב "עבודה עם קבצים בפייתון"

w דורס את הקובץ הקיים כפי שכתוב בתוצאה הראשונה שחיפשתי בגוגל "python open" והגעתי לכאן: https://docs.python.org/2/library/functions.html, שם לחצתי על open().

מכאן, שהקובץ שלך ידרס מיד בתחילת התוכנה. על פניו, לפי מה שכתוב שם, אם אני קורא נכון, w זה רק כתיבה, לא קריאה, ובשביל לקרוא ולכתוב מבלי לדרוס אתה צריך דווקא +r (קודם r ואז פלוס). זה כנראה גם יסביר את השגיאה הזו כשאני מריץ את הקוד שלך:
קוד:
$ ./p.py Traceback (most recent call last): File "./p.py", line 4, in <module> for line in file: io.UnsupportedOperation: not readable


אז, צריך להתחיל כנראה ב +r כאמור. בנוסף לזה, בהמשך הקוד שלך (אני לא מכיר פיית'ון אבל מעריך שזה דומה לשפות אחרות) - עבור כל שורה בקובץ שפתחת, נקראת שורה, מוצבת למשתנה line, ואז בבלוק שפתחת אתה דורס את המשתנה הקיים עם תוצאת ההחלפה של bad ב good. ואז לולאת ה for ממשיכה לאיטרציה הבאה עד שנגמרות כל השורות בקובץ.

הקובץ לא עובר כל שינוי, על פניו (כאמור אני לא יודע פיית'ון).

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

כמובן שגם בפתיחה של קבצים, גם בקריאה, וגם בכתיבה, יכולות להיות שגיאות. לכן אתה אמור לעטוף כל חלק בקוד שעשוי להיכשל ב try/except כדי שיטפלו במקרים האלה. ראה https://docs.python.org/2/tutorial/...ling-exceptions

נ.ב. אם אתה בלינוקס, לא צריך פיית'ון בשביל להחליף מילה במילה אחרת בקובץ:
קוד:
sed -i 's;bad;good;g' maor.txt
יעשה את העבודה מצויין.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 31-08-2017, 21:56
  rpi rpi אינו מחובר  
 
חבר מתאריך: 05.02.17
הודעות: 1,117
בתגובה להודעה מספר 1 שנכתבה על ידי maorhag שמתחילה ב "עבודה עם קבצים בפייתון"

1. חשוב ללמוד להסתכל על הודעת שגיאה. להלן הודעת השגיאה:
file=open("maor.txt" ,"w")
for line in file:
line=line.replace("bad","good")

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for reading

2. המשמעות: בשורה פתיחת הקובץ אתה פותח עם W שמגדיר מצב כתיבה
file=open("maor.txt" ,"w")

3. עדיף לעבוד עם שני קבצים: קובץ INPUT וקובץ OUTPUT
file_in = open("maor_in.txt","r")
file_out = open("maor_out.txt","w")


==========

[
אפשר לעבוד עם אותו קובץ באמצעות + אבל יותר מסובך ואתה מאבד את המקור.
בסיום תוכנית לזכור לסגור קבצים

קוד:
file_in.close() file_out.close() file_in = open("maor_in.txt","r") file_out = open("maor_out.txt","w") for line in file_in: print "input: "+line line=line.replace("bad","good") print "output: "+line file_out.write(line)

Example:
קוד:
>>> file_in.close() >>> file_out.close() >>> file_in.close() >>> file_out.close() >>> file_in = open("maor_in.txt","r") >>> file_out = open("maor_out.txt","w") >>> for line in file_in: ... print "input: "+line ... line=line.replace("bad","good") ... print "output: "+line ... file_out.write(line) ... input: Is bb bad? output: Is bb good? input: Is benet bad? output: Is benet good? >>> file_in.close() >>> file_out.close()
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 20:12

הדף נוצר ב 0.10 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר