2017-12-07 24 views
0

面白いことに、私はこのウェブサイトでこの正確な質問を見つけました。全く同じ宿題問題ではありませんが、問題に関する情報が不十分なため結論に達しませんでした。うまくいけば、私はより良い運を持っていきます。Pythonの固定長レコードの情報を置換する

私はPython 3の宿題に取り組んでおり、私は本当に苦労している問題に遭遇しました。

与えられた正確なプロンプトは次のとおりです。

「あなたはファーストネーム 『F』、姓 『L』、 と新しい誕生日 『B』、ファイル名 『P』渡される固定長のロード最初にF、Lを検索し、Bに誕生日を変更して を検索し、 ファイルを保存します。

ここでは、与えられた変数を使用して、人の誕生日を未知のものから別のものに変更するプログラムを作成するという考え方です。

アダム・スミス11111985Theodoreアンダーソン
03201990Montyビスケットバレル10181980Adam
スミザーズ10101960Ruthy

アンダーソン06062010:[ファイル] - 、それがあることを知っている - ()されたP私は印刷していますせっかちな人であります

貼り付け時にスペースが失われますが、姓と名字の固定長はそれぞれ16で、誕生日は8の固定長です。

生年月日AY私は変更しようとしています:

アダム・スミザーズ

そして、私は彼の誕生日を変更しようとしているもの:

私が試しましたスライスを使って誕生日を置き換えます(私たちの指示に従って、Pythonでテキストファイルを開くと、ファイルは文字列に変換され、したがってimmutabelになります)。しかし、私はスクリプトをしようとすると:

with open(P) as p: 
    new_file = p[0:141] + B + p[161:] 

を、私は、エラーメッセージ「『_io.TextIOWrapper』オブジェクトが添字化ではありません」

を受け、私は今、数時間のためにこれをfinagleしようとしてきたが、近づいていない。この時点でどんな提案も認められるでしょう。ありがとうございます

+0

ヒント:、ファイル全体を読むスペースでそれを分割し、新しいリストを取得します、今で最後のリストの3つの要素をステッピング新しいリストを作ります時間、今あなたは2次元の配列を持っている、残りの部分を自分自身! –

答えて

0

私はあなたが既存のファイルを更新する必要があることを理解しています。そのためには、メモリマップmmapを使用することができます。ここ は、あなたが取ると拡張できる部分コードです:

import mmap 
import os 

def memory_map(filename): 
    size = os.path.getsize(filename) 
    fd = os.open(filename, os.O_RDWR) 
    return mmap.mmap(fd, size, access=mmap.ACCESS_WRITE) 

def update_file(P, F, L, B): 
    with memory_map(P) as p: 
     # Find the offset of the right record with F and L 
     p[141:157] = B 
関連する問題