我有一个与任何特定语言无关的理解问题,但由于我在python中编写,我标记了python。我被要求提供一些“固定长度,没有分隔符的平面文件”的数据。这让我很困惑,因为我理解它:
Input: Column A: date (len6)
Input: Column B: name (len20)
Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]"
“MYVERYSHORTNAME”只有15个字符长,但由于它是固定的20长度输出,我应该用它填充5次?它未指定。
为什么有人甚至需要没有分隔符的文件?无论如何,他/她将需要将其分解为分离的领域,重点是什么?
答案 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'