WindowsError:[错误32]进程无法访问该文件,因为它正被另一个进程使用:'new.dat'

时间:2015-10-24 20:23:34

标签: python file

以下是我的整个计划..我只是不知道我是不是错了 它一直在告诉这个过程正在被其他文件使用......我只是不明白 请帮助我,因为我需要在两天内提交这个

import os
import pickle
password=123
l=input("Enter Password :")
if l==password:
    print"--------Welcome Admin--------"
    class new:
        def __init__(self,a,b,c):
            self.acno=a
            self.acna=b
            self.ini=c
        def display(self):
            print self.acno,self.acna,self.ini
    def form(): # creating new account holders
        print"      ---New Account Entry Form---   "
        n=input("Enter the no. Forms")
        f1=open("new.dat","ab")
        for i in range (n):
            a=input("Enter The Account No:")
            b=raw_input("Enter The Name of The Account Holder:")
            c=input("Enter The Initial Amount (>=5000 ):")
            if c<5000:
                print "Initial Amount Too Low"
                c=input("Enter The Initial Amount (>=5000 ):")
            e=new(a,b,c)
            pickle.dump(e,f1)
        f1.close()
        print"--------Account Created Successfully--------------"
    def depo():#depositing amount in the account
        print"  ---- Account Deposition Form ---- "
        p=input("Enter the Account Number:")
        f1=open("new.dat","rb")
        f2=open("dep.dat","wb")
        amt=input("Enter the Amount to Deposit :")
        try:
            while True:
                s=pickle.load(f1)
                if s.acno==p:

                    s.ini+=amt
                    pickle.dump(s,f2)
        except EOFError:
            f1.close()
            f2.close()
        print"Amount Deposited Successfully"
        os.remove("new.dat")
        os.rename("dep.dat","new.dat")
    def withdraw():#to withdraw 
        print "            Account Transaction Form            "
        p=input("enter the account n:")
        f2=open("new.dat","rb")
        f3=open("f2.dat","wb")
        amt=input("Enter the amount to Withdraw:")
        try:
            while True:
                s=pickle.load(f2)
                if s.acno==p:
                    if s.ini>amt or s.ini==amt :
                        s.ini-=amt
                        pickle.dump(s,f3)
                        print "Amount Withdrawed"
                    elif s.ini<amt:
                        print "No sufficient balance "
                    else:
                        print " Account no. invalid"
        except EOFError:
            f2.close()
            f3.close()
        os.remove("new.dat")
        os.rename("f2.dat","new.dat")
    def balance():#check the balance 
        print"          Balance Amount Details"
        p=input("Enter the Account Number:")
        f3=open("new.dat","rb")
        try:
            while True:
                s=pickle.load(f3)
                if s.acno==p:
                    print "the Balance Amount for Acc. no. ",p,"is :", s.ini
        except EOFError:
            f3.close()
    def displa():#display all the account holders 
        print "      All Account Holders List      "
        f1=open("new.dat","rb")
        try :
            while True:
                k=pickle.load(f1)
                k.display()
        except EOFError:
            f1.close()
    def dele(): # to delete the account holder error here
        print "       Account Deletion Form"
        f1=open("new.dat","rb")
        f2=open("tnew.dat","wb")
        try:
            e=pickle.load(f1)
            no=input("Enter the Account No:")
            if e.acno!=no:
                pickle.dump(e,f2)
        except EOFError:
            f2.close()
            f1.close()
        os.remove("new.dat") #error here
        os.rename("tnew.dat","new.dat") # error here
        f1.close()
    while True:
        print"-----------------------------------------------------------------------------------------------------------------"
        print"                                                                               Bank Management System"
        print"                                                                                                       "
        print"---Main Menu--- :"
        print"1. New account"
        print"2. Deposit amount"
        print"3. Withdraw amount"
        print"4. Balance account"
        print"5. All Account Holders List "
        print"6. Close An Account"
        print"7. Exit"
        choice=input("Enter Your Option (1-7):")
        if choice==1:
            form()
        elif choice==2:
            depo()
        elif choice==3:
            withdraw()
        elif choice==4:
            balance()
        elif choice==5:
            displa()
        elif choice==6:
            dele()
        else:
            print "-------Login In Later----------"
            break
else:
    print "PASSWORD Incorrect"

1 个答案:

答案 0 :(得分:0)

尝试f1=open("new.dat","rb")然后os.remove("new.dat")而不先关闭它;您无法将其删除并发生错误,因为该文件位于其他进程的下方,换句话说,它正在阅读

你不应该用f = open(filename, 'x')打开文件然后用f.close()关闭,如果由于某种原因程序没有执行关闭,它可能会产生与你的问题完全相同的问题...

相反,尝试使用with open(filename, 'x') as f:重写您的函数,它会在内部代码运行完成时自动关闭文件,或者在程序受到影响时自动关闭文件

http://effbot.org/zone/python-with-statement.htm

否则,如果你不想弄乱一切 (请注意,如果没有发生错误,您的函数会保持文件处于打开状态), 尝试使用except EOFError:更改每个finally:块,最后与使用with相同。

来自消息来源:

  

&#34; try-finally结构保证了finally部分下的代码   总是被执行,即使执行工作的代码没有执行   。光洁度&#34;

这应该确保关闭