没有分隔符的固定长度平面文件

问题描述:

我有一个理解问题与任何特定语言无关,但是因为我正在用python编写,所以我标记了python。我被要求提供一些“固定长度,平面文件没有分隔符”的数据。它混淆了我,因为我的理解是这样的:没有分隔符的固定长度平面文件

Input: Column A: date (len6) 

Input: Column B: name (len20) 

Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]" 

“MYVERYSHORTNAME”只有15字符长,但由于它的固定20长度的输出,我应该填写的东西5倍呢?没有说明。

为什么有人甚至需要一个没有分隔符的文件?无论如何,他/她需要将其分解到分离的领域,这有什么意义?

+0

点可能能够以二进制形式读取它作为大小固定的字段文件(数据库) –

+0

某些框架可能需要此格式,例如ISO8583。 –

这种扁平(二进制)文件是为了更快速/更容易被机器读取,并且比更具人性化的表示(例如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' 
+0

你能否确认我必须在右侧填充空格不够长的字段,并且没有足够长的数字以及左边的零? – dgan

+0

是的,你必须填写任何不足以在每个领域进行的价值。现在填充边和填充字符取决于你(这是一个设计决定),你只需要在书写和阅读之间保持一致。通常,数字左侧填充0或空字符,而字符串右侧填充空字符(空字符=所有位为0的字符)。 – Guillaume

通常,当您看到固定长度的文件时,您正在处理遗留系统。例如,AS400通常会用人造分离器吐出固定长度的文件(为什么,我不知道,但这就是我见过的)。

通常,字符串用空格填充,数字用0填充(零)。

这不是绝对的。