انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


 خبرها، اتفاقات و تصاویر مربوط به مربوط به جشن انتشار را با هشتگ ufest1804 در شبکه‌های اجتماعی دنبال کنید

نویسنده موضوع: مشکل در پایتون (باز کردن فایل - نوشتن در فایل)  (دفعات بازدید: 2907 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین M4hdi

  • Newbie
  • *
  • ارسال: 9
  • جنسیت : پسر
    • iransec.net/forums
سلام دوستان !
من یه برنامه نوشتم که موقع اجرا ازت 2 تا عدد میگیره و اعداد بین اینارو نشون میده !
مثلا عدد اولی رو میزنی 1 و عدد دومی رو میزنی 20 و نتیجش این میشه که از 1 تا 20 زیر هم چاپ میکنه !
اما میخواستم یکم کاربردی ترش کنم ! میخوام بااستفاده از توابع : write و open یه کاری بکنم که بعد از وارد کردن اعداد خودش در یه فایل ذخیره کنه !
این سورس اولی که بدون مشکل هست و کارش فق نمایش دادنه :
#!/usr/bin/python
num1=input("Type First Number : ")
num2=input("Type Second Number : ")
while num1<num2 :
print num1
num1 +=1
if num1>num2 :
print "Please Type a True Number !"
else  :
print "Good Luck"

اینم سورس دومی که مشکل دار هست و کارشم گرفت اعداد و ذخیره ی اعداد بین :
#!/usr/bin/python
num1=input("Type First Number : ")
num2=input("Type Second Number : ")
while num1<num2 :
print num1
num1 +=1
m=open('test.txt','w')
m.write(num1)
m.close()
if num1>num2 :
print "Please Type a True Number !"
else  :
print "Good Luck"

الان کلا مشکلم اینه که در سورس دومی , مثلا بعد از اجرا وقتی عدد اول رو میزنی 1  و عدد دوم رو میزنی 50  این نرم افزار باید خودش  از 1 تا 50 رو چاپ کنه و همینطور باید از 1 تا 50 رو در فایلی به نام test.txt ذخیره کنه ! اما ارور میده  ](*,)
ممنون میشم دوستان کمکم کنن !

آفلاین vandu

  • Hero Member
  • *
  • ارسال: 741
  • جنسیت : پسر
چیزی که به ذهنم میرسه اینه که یه فایل  رو توی حلقه تکرار اینقدر باز و بسته نکنید:
مثال برای ذخیره اعداد:
a = input('a = ')
b = input('b = ')
f=open('test.txt','w')
for n in range(a,b+1):
    f.write(str(n)+'\n')
f.close()

مثال برای بازیابی اعداد:
f=open('test.txt','r')
for n in f.readlines():
    print(n)
f.close()
Nothing is particularly hard if you divide it into small jobs

Henry Ford

آفلاین ابراهیم مشهدی تفرشی

  • Sr. Member
  • *
  • ارسال: 336
  • جنسیت : پسر
  • همیشه یک راه بهتر هست.
من هم خیلی به خودم فشار آوردم   ](*,) تونستم این رو بنویسم
با اینکه مثل دوستان مختصر نیست ولی :
۱ : ذخیره و بازیابی تو خودشه
۲ : چون از pickle استفاده کرده لازم نیست که به string تبدیل بشه همون int ذخیره می شه
۳ : تا اونجایی که به مخم رسید سعی کردم تمام احتمالات رو در نظر بگیرم
          مثلا لازم نیست حتما عدد اول از عدد دوم کوچیکتر باشه
                  اگر عدد اول کوچکتر باشه به بالا می شمره
                  اگر عدد اول بزرگتر باشه به پایین می شمره

یه ایراد عجیب هم داره اینه که
من نمی دونم چرا وقتی فایل رو بازیابی می کنه متن فایل خالی می شه؟ :o
import pickle
def save2file ():
f = open ("test.pck", "w")
m=input("First Number?.")
n=input("Second Number?")
if n > m:
while m <= n:
pickle.dump(m, f)
m = m + 1
elif m > n:
while m >= n:
pickle.dump(m, f)
m = m - 1
elif m == n:
pickle.dump(m, f)
f.close()
def loadfile ():
while 1:
x = pickle.load (f)
if x != "":
print x
elif x == "":
break
f.close()
while 1:
print "For save press 1 \nFor load press 2"
answer = raw_input()
if answer == "1":
save2file()
break
elif answer == "2":
try :
f = open ("test.pck", "r")
loadfile()
break
except :
print 'There is no file. \n'
break
else:
print "press 1 or 2... \n"
آخرش هم تشکر می کنم از دوستی که این بحث رو مطرح کرد
کلی تمرین شد برای من در سرفصل های مختلف
« آخرین ویرایش: 17 بهمن 1392، 02:28 ب‌ظ توسط ابراهیم مشهدی تفرشی »
ET

آفلاین omidima

  • Newbie
  • *
  • ارسال: 2
  • جنسیت : پسر
    • mypy
با سلام خدمت شما .
شما فایل رو با قابلیت w باز کردید یعنی هر بار که میخواد فایل رو بنویسیه اون رو پاک میکنه و دوباره شروع میکنه به نوشتن
برای رفع یان مشکل میتونید از a+استفاده کنید تا این مشکل براتون بر طرف بشه

آفلاین omidima

  • Newbie
  • *
  • ارسال: 2
  • جنسیت : پسر
    • mypy
پاسخ برای پرسش اول
دوست عزیز شما میتونید به این صورت کد ها رو بنویسید
    file = 'e:\\d.txt'
    omid=open(file,'w')
    num1=int(input("Type First Number : "))
    num2=int(input("Type Second Number : "))
    while num1<num2 :
        omid.write(str(num1)+'\n')
        num1 +=1
    if num1>num2 :
        print ("Please Type a True Number !")
    else  :
        print ('Good lock')
    omid.close()
    omid=open(file,'r')
    print(omid.read())

بنده از پایتون سه استفاده مینکن برای همین print یک تابع هست اگر به مشکل خوردید در پایتون 2 پرانتزهای print رو بردارید

آنلاین هومان

  • Hero Member
  • *
  • ارسال: 979
  • جنسیت : پسر
  • arch + i3, awesome
پایتون ۲ فقط یه روز دیگه از عمرش مونده
If you don't want chains on you hand and foot, your only escape is to switch to a free operating system

آفلاین mahdi7d1

  • Jr. Member
  • *
  • ارسال: 40
  • جنسیت : پسر
سلام دوستان !
من یه برنامه نوشتم که موقع اجرا ازت 2 تا عدد میگیره و اعداد بین اینارو نشون میده !
مثلا عدد اولی رو میزنی 1 و عدد دومی رو میزنی 20 و نتیجش این میشه که از 1 تا 20 زیر هم چاپ میکنه !
اما میخواستم یکم کاربردی ترش کنم ! میخوام بااستفاده از توابع : write و open یه کاری بکنم که بعد از وارد کردن اعداد خودش در یه فایل ذخیره کنه !
این سورس اولی که بدون مشکل هست و کارش فق نمایش دادنه :
#!/usr/bin/python
num1=input("Type First Number : ")
num2=input("Type Second Number : ")
while num1<num2 :
print num1
num1 +=1
if num1>num2 :
print "Please Type a True Number !"
else  :
print "Good Luck"

اینم سورس دومی که مشکل دار هست و کارشم گرفت اعداد و ذخیره ی اعداد بین :
#!/usr/bin/python
num1=input("Type First Number : ")
num2=input("Type Second Number : ")
while num1<num2 :
print num1
num1 +=1
m=open('test.txt','w')
m.write(num1)
m.close()
if num1>num2 :
print "Please Type a True Number !"
else  :
print "Good Luck"

الان کلا مشکلم اینه که در سورس دومی , مثلا بعد از اجرا وقتی عدد اول رو میزنی 1  و عدد دوم رو میزنی 50  این نرم افزار باید خودش  از 1 تا 50 رو چاپ کنه و همینطور باید از 1 تا 50 رو در فایلی به نام test.txt ذخیره کنه ! اما ارور میده  ](*,)
ممنون میشم دوستان کمکم کنن !
پایتون ارور های خیلی خوبی میده. اگه به ارور ها دقت کنین که چی میگن ممکنه به نتایج خوبی برسی. برای این مساله هم باز کردن و بستن فایل تو لوپ قطعا استاندارد نیست ولی مطمئن نیستم که ارور دقیقا به این خاطر باشه. میتونی یه رشته بسازی که اعداد یه خط یه خط بهش اضافه کنی و در نهایت فقط یبار فایلو باز کنی و اون رشته رو توی فایل بنویسی.

آفلاین mahdi7d1

  • Jr. Member
  • *
  • ارسال: 40
  • جنسیت : پسر
با سلام خدمت شما .
شما فایل رو با قابلیت w باز کردید یعنی هر بار که میخواد فایل رو بنویسیه اون رو پاک میکنه و دوباره شروع میکنه به نوشتن
برای رفع یان مشکل میتونید از a+استفاده کنید تا این مشکل براتون بر طرف بشه
حالا یادم اومد حرف این دوستمون کاملا درسته استفاده از w به عنوان نوع باز کردن اطلاعات قبلی فایل رو پاک می‌کنه. راه بهترش همون a+ هست و یا همونطور که گفتم تولید استرینگ کامل و بعد نوشتنش تو فایل.