0

私は、シーケンシャル アクセス マスター ファイルを実装する Python 3 プログラムに取り組んでいます。私は正常に動作するファイルを開くコードを持っており、(各行を繰り返した後) 空のマスター ファイルを防ぐためにセンチネル値を使用していることに気付きました。空のリストを防ぐためのより Pythonic な方法はありますか?

translistトランザクションのリストです (つまり、1 Brown 123 Main St.)。 masterlistマスターファイル (例: Charlie 134 South St.) 内の現在の名前とアドレスのペアのリストです。

私の python を批判することを躊躇しないでください。これは私が書いた最初の非使い捨てプログラムです。また、このプログラムはまだ完成していません。変更と削除を実装する予定です。

while(translist): #is not empty
    currentTransactions = [] #reset current transaction list
    currentTransactions.append(translist.pop(0)) #get the first transaction
    name = getName(currentTransactions[0])   

    #collect all transactions with same name
    for item in translist:
        if(getName(item) in name): #if names match
            currentTransactions.append(item) #add to the list of current transactions

    #then filter out the current transactions from the transactions list
    translist = [line for line in translist if line not in currentTransactions]

    #get ready to apply the current transaction
    if(masterlist):
        currentRecord = masterlist.pop(0)
    else: #the code should continue, but only insertions are valid
        currentRecord = -1 #sentinel value
        continue
    delete = bool() #false   

    if(currentRecord == -1 or getName(currentRecord) > name): 
        thisTransaction = currentTransactions.pop(0) #get the first transaction
        thisType = getTransactionType(thisTransaction) #and its type
        if(thisType == "insert"):
            masterlist = currentRecord.append(masterlist) #sticks the current record back on the front
            currentRecord = format(thisTransaction) #then prep for writing

    while(currentRecord != -1 and getName(currentRecord) < name): #while the name in the master list is not in our transactions
        masterfile.write(currentRecord)   #write it
        if masterlist: #is not empty
            currentRecord = masterlist.pop(0) #then move on to the next
    if not delete:
        masterfile.write(currentRecord)

前もって感謝します!さらに情報が必要な場合や、プログラムの完全なコードが必要な場合は投稿してください。

4

0 に答える 0