固定长度的平面文件,不带分隔符

时间:2017-09-04 08:33:26

标签: python flat-file

我有一个与任何特定语言无关的理解问题,但由于我在python中编写,我标记了python。我被要求提供一些“固定长度,没有分隔符的平面文件”的数据。这让我很困惑,因为我理解它:

Input: Column A: date (len6)

Input: Column B: name (len20)

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

“MYVERYSHORTNAME”只有15个字符长,但由于它是固定的20长度输出,我应该用它填充5次?它未指定。

为什么有人甚至需要没有分隔符的文件?无论如何,他/她将需要将其分解为分离的领域,重点是什么?

2 个答案:

答案 0 :(得分:1)

通常,当您看到固定长度文件时,您将处理旧系统。例如,AS400通常会使用人工分隔符吐出固定长度的文件(为什么,我不知道,但这就是我所见过的。)

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

这不是绝对的。

答案 1 :(得分:1)

这种平面(二进制)文件意味着更快/更容易被机器读取,并且比更人性化的表示(例如,JSON,CSV等)中的等效文件更有效。例如,机器可以在读取内容之前预先分配适当的内存量。 如今,凭借几乎无限量的RAM和语言的动态特性,没有人再使用平面文件(除非特别需要)。

在Python中,为了正确处理这种二进制文件,您可以使用标准库中的struct模块: https://docs.python.org/3.6/library/struct.html#module-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'