IOPanel

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

תיכנות פורום בנושאי תיכנות , פיתוח אתרים , שפות תיכנות , אפליקציות סלולר וטאבלטים.

תוכנה ומערכות הפעלה : תיכנות

עזרה ב-python

שלום לכולם, אני מנסה לכתוב איזה תוכנה בפייתון שאמורה להמיר קובץ TEXT לקובץ TEXT אחר לאחר כמה שינויים שהיא עושה ...
תגובה
 
קישור חוזר הגדרות אשכול אפשרויות הצגת נושא
ישן 05-08-11, 13:11   #1 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל עזרה ב-python

שלום לכולם, אני מנסה לכתוב איזה תוכנה בפייתון שאמורה להמיר קובץ TEXT לקובץ TEXT אחר לאחר כמה שינויים שהיא עושה בו. למישהו פה יש את הנסיון/ידע שיכול לעזור לי עם כמה שאלות בזה ? יש לי כבר תוכנה כתובה אבל יש בה כמה באגים שאני לא מצליח לפתור ולא מבין מאיפה הם באים.
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
ישן 05-08-11, 13:27   #2 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

תעלה את הקוד ותכתוב מה הבעיות שבהם נתקלת.
את רוב העבודה עם הקבצים אני מעביר בC , אבל מאמין שאפשר להשלים את הסינטקס.
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 05-08-11, 13:48   #3 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל

תודה דני, זה הקוד:

#!/usr/bin/python

################################################## ###############

def readpdb(file,f=6):
"""
readpdb is used to read a pdb file into a list
for example: data=readpdb("dna.pdb")
"""
lines=[]
pdbfile=open(file,'r')
line=pdbfile.readline()
while line:
if line.split()[0]=='ATOM' or line.split()[0]=='HETATM':
lines.append(line.split())
line=pdbfile.readline()
for i in range(len(lines)):
lines[i][f]=float(lines[i][f])
lines[i][f+1]=float(lines[i][f+1])
lines[i][f+2]=float(lines[i][f+2])
lines[i][f+3]=float(lines[i][f+3])
lines[i][f-1]=float(lines[i][f-1])
pdbfile.close()
return lines
################################################## ################


pdbname=input("The input pdb file name?\n")
crdname=input("The output crd file name?\n")
lines=readpdb(pdbname)
for i in range(len(lines)):
if lines[i][2]=='HN1' and lines[i][3]=='PRO':
for j in range(8):
lines[i+j-1][3]='PROP'
if lines[i][2]=='OT1' and lines[i][3]!='CT1':
for j in range(3):
lines[i+j-1][3]='CTER'
if lines[i][2]=='HT1' and lines[i][3]!='CT1' and lines[i][3]!='CT2' and lines[i][3]!='CT3':
if lines[i][3]=='GLY':
for j in range(7):
lines[i+j-1][3]='GLYP'
else:
for j in range(6):
lines[i+j-1][3]='NTER'
lines[i][9]=0
crdfile=open(crdname,'w')
crdfile.write("* converted from model.pdb\n")
crdfile.write("*\n")
crdfile.write(str(len(lines))+"\n")
for i in range(len(lines)):
crdfile.write("%5s %5s %3s %3s %10.5f%10.5f%10.5f MAIN %-5s%10.5f\n" %(lines[i][1],lines[i][4],lines[i][3],lines[i][2],lines[i][5],lines[i][6],lines[i][7],lines[i][4],lines[i][9]))
crdfile.close()

התוכנה במקור אמורה לקחת קובץ טקסט מסוג מסוים שיש בו מספרים ואותיות להפריד אותה לעמודות ולסדר אותם מחדש ככה שהם יתיאמו לפורמט אחר שתוכנה אחרת שאני משתמש קוראת רק אותו. באזור שורה 599 התוכנה מתחילה להשתגע ולבלבל את העמודות. זה דוגמה למה שאמור לצאת:
590 40 VAL HA -16.92500 8.25900 4.68100 MAIN 40 0.00000
591 40 VAL HC -16.70400 10.10900 6.05000 MAIN 40 0.00000
592 40 VAL HB -19.89500 8.10500 5.53700 MAIN 40 0.00000
593 40 VAL HG1 -18.79900 9.86500 3.23400 MAIN 40 0.00000
594 40 VAL HG1 -20.51800 9.55000 3.57200 MAIN 40 0.00000
595 40 VAL HG1 -19.55900 10.45200 4.73100 MAIN 40 0.00000
596 40 VAL HG2 -19.14800 6.15400 4.10000 MAIN 40 0.00000
597 40 VAL HG2 -20.36500 7.14900 3.29200 MAIN 40 0.00000
598 40 VAL HG2 -18.65300 7.28400 2.81900 MAIN 40 0.00000
599 41 ILE N -14.78600 9.97600 9.68200 A 41 0.00000
600 41 ILE CA -15.26500 8.94400 10.58900 A 41 0.00000
601 41 ILE C -14.10100 8.44900 11.45000 A 41 0.00000
602 41 ILE O -13.48300 7.43300 11.13700 A 41 0.00000
603 41 ILE CB -15.97100 7.83400 9.81100 A 41 0.00000
604 41 ILE CG1 -17.23900 8.35800 9.13400 A 41 0.00000
605 41 ILE CG2 -16.25900 6.63200 10.71200 A 41 0.00000
606 41 ILE CD -17.73100 7.38600 8.06100 A 41 0.00000
607 41 ILE H -14.28600 9.63800 8.88500 A 41 0.00000
608 41 ILE HA -16.00800 9.40300 11.24300 A 41 0.00000
609 41 ILE HB -15.30300 7.49100 9.02100 A 41 0.00000
610 41 ILE HG1 -18.01800 8.50800 9.88100 A 41 0.00000

לעומת זאת זה מה שאני מקבל:
590 40 VAL HA -16.92500 8.25900 4.68100 MAIN 40 0.00000
591 40 VAL HC -16.70400 10.10900 6.05000 MAIN 40 0.00000
592 40 VAL HB -19.89500 8.10500 5.53700 MAIN 40 0.00000
593 40 VAL 1HG1 -18.79900 9.86500 3.23400 MAIN 40 0.00000
594 40 VAL 2HG1 -20.51800 9.55000 3.57200 MAIN 40 0.00000
595 40 VAL 3HG1 -19.55900 10.45200 4.73100 MAIN 40 0.00000
596 40 VAL 1HG2 -19.14800 6.15400 4.10000 MAIN 40 0.00000
597 40 VAL 2HG2 -20.36500 7.14900 3.29200 MAIN 40 0.00000
598 40 VAL 3HG2 -18.65300 7.28400 2.81900 MAIN 40 0.00000
599 A ILE N 41.00000 -14.78600 9.97600 MAIN A 0.00000
600 A ILE CA 41.00000 -15.26500 8.94400 MAIN A 0.00000
601 A ILE C 41.00000 -14.10100 8.44900 MAIN A 0.00000
602 A ILE O 41.00000 -13.48300 7.43300 MAIN A 0.00000
603 A ILE CB 41.00000 -15.97100 7.83400 MAIN A 0.00000
604 A ILE CG1 41.00000 -17.23900 8.35800 MAIN A 0.00000
605 A ILE CG2 41.00000 -16.25900 6.63200 MAIN A 0.00000
606 A ILE CD1 41.00000 -17.73100 7.38600 MAIN A 0.00000
607 A ILE H 41.00000 -14.28600 9.63800 MAIN A 0.00000
608 A ILE HA 41.00000 -16.00800 9.40300 MAIN A 0.00000
609 A ILE HB 41.00000 -15.30300 7.49100 MAIN A 0.00000
610 A ILE 2HG1 41.00000 -18.01800 8.50800 MAIN A 0.00000

בעצם מהרגע שהוא מתחיל לסמן A במקום מספר התוכנה בפועל מפסיקה לעבוד נכון מבחינתי.
יש לך רעיון מה גורם לזה ?
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:02   #4 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל

זיהיתי את הבעיות העיקריות - הבעיה היתה בקלט.
ציטוט:
ATOM 590 HA VAL 40 -10.976 9.333 3.967 1.00 0.00 H
ATOM 591 HC VAL 40 -10.787 11.395 4.996 1.00 0.00 H
ATOM 592 HB VAL 40 -13.946 9.284 4.835 1.00 0.00 H
ATOM 593 1HG1 VAL 40 -12.869 10.636 2.263 1.00 0.00 H
ATOM 594 2HG1 VAL 40 -14.584 10.358 2.649 1.00 0.00 H
ATOM 595 3HG1 VAL 40 -13.642 11.462 3.636 1.00 0.00 H
ATOM 596 1HG2 VAL 40 -13.166 7.126 3.758 1.00 0.00 H
ATOM 597 2HG2 VAL 40 -14.395 7.947 2.789 1.00 0.00 H
ATOM 598 3HG2 VAL 40 -12.683 8.025 2.301 1.00 0.00 H
ATOM 599 N ILE A 41 -8.879 11.921 8.598 0.00 0.00 N
ATOM 600 CA ILE A 41 -9.345 11.055 9.669 0.00 0.00 C
ATOM 601 C ILE A 41 -8.177 10.733 10.603 0.00 0.00 C
ATOM 602 O ILE A 41 -7.543 9.688 10.471 0.00 0.00 O
ATOM 603 CB ILE A 41 -10.032 9.816 9.094 0.00 0.00 C
ATOM 604 CG1 ILE A 41 -11.305 10.196 8.335 0.00 0.00 C
ATOM 605 CG2 ILE A 41 -10.305 8.784 10.189 0.00 0.00 C
ATOM 606 CD1 ILE A 41 -11.780 9.046 7.447 0.00 0.00 C
ATOM 607 H ILE A 41 -8.371 11.458 7.871 0.00 0.00 H
ATOM 608 HA ILE A 41 -10.096 11.609 10.233 0.00 0.00 H
ATOM 609 HB ILE A 41 -9.356 9.352 8.376 0.00 0.00 H
ATOM 610 2HG1 ILE A 41 -12.089 10.461 9.045 0.00 0.00 H
1)משורה 599 - נופיע עמודה נוספת שהתוכנה לא לוקחת בחשבון שגורמת לו לאבד סנכרון עם הקובץ. עכשיו השאלה היא איך אני יכול לטפל בזה?
2) על פעם שמתחיל רצף אותיות עם מספר משמאל התוכנה מעתיקה אותו אחד לאחד במקום לשמוט את הספרה משמאל. גם לזה אני צריך עצות איך לטפל בזה.
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:05   #5 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

שחקתי עם הקוד קצת ובדקתי את הקלט , הבעייה היא שהקוד לא דינאמי ביחס למספר המחרוזות בשורה .
צריך להוסיף בפונקציה למעלה בדיקה של מספר המחרוזות בשורה יחידה , זה משתנה בדיוק איפה שמתחילה הבעייה .
אתה מתחיל עם אחת עשרה מחרוזות בפורמט :
ATOM 598 3HG2 VAL 40 -18.653 7.284 2.819 1.00 0.00 H
ועובר לשתים עשרה מחרוזות אחרי שמינית קובץ בערך :
ATOM 599 N ILE A 41 -14.786 9.976 9.682 0.00 0.00 N
העניין הוא שה"A" הזו שם נחשבת כסטרינג בשל עצמו , ואז במקום לקחת את המספר 41 הקוד הולך לסטרינג ועושה בעייה.

מה שלדעתי יעבוד זה להוסיף שורה : f=len(lines[i])-5 (אתה עשית פיקס f=6 , אני משער שזה מספר_מחרוזות_בשורה פחות 5)
בfor בפונקציה למעלה .
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:11   #6 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל

איך נפתרים מההצקות של indents שהוא מבלבל את המוח עם?
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
קישור פירסומי
ישן 05-08-11, 16:13   #7 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

תעבוד עם editor אחר ולא עם הIDLE , אפשר עם Wordpad או Notepad++ .

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

נערך לאחרונה על ידי dany_74q, 05-08-11 בשעה 16:20.
dany_74q לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:20   #8 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל

טוב תודה, מצאתי איך להסתדר עם ה-INDENTS. ניסיתי את התיקון שהצעת אבל עכשיו הוא טוען שחסר לי FLOAT. צריך לנסות להבין איפה הבעיה שלו עכשיו
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:24   #9 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

הבעייה כנראה בשורה הזו :
crdfile.write("%5s %5s %3s %3s %10.5s%10.5f%10.5f MAIN %-5s%10.5f\n" %(lines[i][1],lines[i][4],lines[i][3],lines[i][2],lines[i][5],lines[i][6],lines[i][7],lines[i][4],lines[i][9]))

השורה המקורית הייתה :

crdfile.write("%5s %5i %3s %3s %10.5f%10.5f%10.5f MAIN %-5i%10.5f\n" %(lines[i][1],lines[i][4],lines[i][3],lines[i][2],lines[i][5],lines[i][6],lines[i][7],lines[i][4],lines[i][9]))

אבל היא לא עבדה לי מלכתחילה , בהרצה יצאה שגיאה שמתקבל סטרינג במקום מספר , אצלי השורה הראשונה עובדת בלי בעייה .
תשחק עם זה .
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 05-08-11, 16:29   #10 (קישור ישיר)
IO Pro
 
סמל האישי של raziel1981
 
תאריך הצטרפות: Sep 2009
הודעות: 1,402
ברירת מחדל

עדיין מופיע הבאג שמתחיל לרשום A במקום מספרים בעמודה השניה. נראה לי שתנאי IF יכול לטפל בזה. מה דעתך ?
__________________
CPU:Intel Core i7 3770k@4.2GHz Mobo:Asrock Z77 Extreme 4 RAM:2x8GB Corsair Vengeance 1600MHz GFX:Gigabyte 970GTX G1 4GB OS:Win7 Pro@Samsung 840 Evo 250GB Storage:WD1003FZEX,Samsung HD204UI,Seagate 7200.11 2GB, Hitachi Travelstar 7K1000 1TB Display:Dell U2412M Case:Corsair 540R PSU:Enermax Revolution 950W Peripherals: Logitech G930,Razer Onza,TT Meka G1,TT Black
ביקורות: nMedia HTPC 8000;Asus e35m1-m pro פרוייקט: Obelisk V2 (תודה לאלמוג על הלוגו),Overlord
raziel1981 לא מחובר   הגב עם ציטוט
ישן 05-08-11, 17:10   #11 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

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

crdfile.write("%5s %5i %3s %3s %10.5f%10.5f%10.5f MAIN %-5i%10.5f\n" %(lines[i][1],lines[i][4],lines[i][3],lines[i][2],lines[i][5],lines[i][6],lines[i][7],lines[i][4],lines[i][9]))

במקום עם מספרים בפיקס עבדתי עם המשתנה (temp-num) .
אני מאמין שהתוצאה בסדר , תבדוק ה"פ .
__________________
dany_74q לא מחובר   הגב עם ציטוט
תגובה


הגדרות אשכול
אפשרויות הצגת נושא

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

vB code הינו פועל
סמיילים הינו פועל
קוד [IMG] הינו פועל
קוד HTML הינו כבוי
Trackbacksהינו פועל
Pingbacks הינו פועל
Refbacks הינו פועל

נושאים דומים
אשכול מפרסם האשכול פורום תגובות הודעה אחרונה
עזרה ב Python rouvio תיכנות 16 07-08-10 13:57
עזרה מאוד חשובה, יום רביעי מתכונת ואני צריך עזרה עם תרגיל ZipoX דיבורים על הא ודא 33 24-03-10 17:53
ספר Python YosiAT תיכנות 2 05-03-09 20:51
Monty Python ביוטיוב iakovl דיבורים על הא ודא 4 23-11-08 19:02
[עזרה] צריך עזרה לגבי מפרט מחשב+בחירת מארז *התקציב: 5.5K! Almog Design מפרטי מחשב 145 27-06-07 16:54


כל הזמנים הם GMT +3. השעה כרגע היא 17:26.





מופעל על ידי: vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO
IOPanel.net © כל הזכויות שמורות