固定長データ
Posted feedbacks - Python
エラー処理は無しです 特に面白みは無いですね
日付などが、文字列ではなくバイナリであれば structが生きてくるかもしれませんが
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #固定長データ
import struct
f = file("foo.txt" , "rb")
result = []
fmt = "12s 12s 1s 3s 4s 2s" + "2s 500s 500s 500s"*31
size = struct.calcsize(fmt)
while(True):
r = f.read(size)
if len(r) < size:
break
data = struct.unpack(fmt , r)
d = dict(
FirstName = data[0] ,
SecondName = data[1] ,
Sex = data[2] ,
Age = int(data[3]) ,
Year= int(data[4]) ,
Month=int(data[5])
Menu = {}
)
for i in range(31):
Day = int(data[6+4*i])
menu = dict(
BreakFirst = data[7+4*i]
Lunch = data[8+4*i]
Dinner = data[8+4*i]
)
d["Menu"][Day]=menu
result.append(d)
|
サクッと書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | dat = open('data.txt').read()
day_count = 31
person_count = 500
pat = [12, 12, 1, 3, 4, 2]
for i in range(day_count):
pat += [2, 500, 500, 500]
start = 0
end = 0
person = []
persons = []
for i, length in enumerate(pat * person_count):
end += length
person.append(dat[start:end])
start += length
if i % len(pat) == len(pat) - 1:
persons.append(person)
person = []
|


Mymelo #6060() Rating5/7=0.71
固定長のデータが記載されたファイルを読み込むプログラムを作成してください。読み込んだデータは、複数の値を格納できるデータ型に格納してください。
ファイルには、すべて ascii 文字で以下のデータが格納されています。デリミタはなく、固定長で格納されています。レコードとレコードのあいだも改行はありません。
以上の形式のデータ500人分を読みこんで、データを複数の値を格納できるデータ型に格納してください。データに大して何か処理を行う必要はなく、すぐに破棄してかまいません。
この問題は、このようなファイルをどのように扱うかを知りたくて作成しました。
[ reply ]