没有分隔符的固定长度平面文件
问题描述:
我有一个理解问题与任何特定语言无关,但是因为我正在用python编写,所以我标记了python。我被要求提供一些“固定长度,平面文件没有分隔符”的数据。它混淆了我,因为我的理解是这样的:没有分隔符的固定长度平面文件
Input: Column A: date (len6)
Input: Column B: name (len20)
Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]"
“MYVERYSHORTNAME”只有15字符长,但由于它的固定20长度的输出,我应该填写的东西5倍呢?没有说明。
为什么有人甚至需要一个没有分隔符的文件?无论如何,他/她需要将其分解到分离的领域,这有什么意义?
答
这种扁平(二进制)文件是为了更快速/更容易被机器读取,并且比更具人性化的表示(例如JSON,CSV等)中的等效记忆更有效率。例如,机器可以在读取内容之前预先分配适量的内存。 现在,随着RAM的数量和语言的动态性几乎无限,没有人再使用平面文件(除非特别需要)。
在Python中,为了与这种二进制文件妥善处理,比如,你可以使用struct
模块从标准库:
例子:
import struct
from datetime import datetime
mydate = datetime.now()
myshortname = "HelloWorld!"
struct.pack("8s20s", mydate.strftime('%Y%m%d').encode(), myshortname.encode())
>>> b'201709HelloWorld!\x00\x00\x00\x00\x00\x00\x00\x00\x00'
答
通常,当您看到固定长度的文件时,您正在处理遗留系统。例如,AS400通常会用人造分离器吐出固定长度的文件(为什么,我不知道,但这就是我见过的)。
通常,字符串用空格填充,数字用0填充(零)。
这不是绝对的。
点可能能够以二进制形式读取它作为大小固定的字段文件(数据库) –
某些框架可能需要此格式,例如ISO8583。 –