没有分隔符的固定长度平面文件
fixed length flat file without separators
我有一个与任何特定语言无关的理解问题,但由于我在 python 中写作,所以我标记了 python。我被要求在 "fixed length, flatfile without separators" 中提供一些数据。这让我很困惑,因为我是这样理解的:
Input: Column A: date (len6)
Input: Column B: name (len20)
Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]"
"MYVERYSHORTNAME" 只有 15 个字符长,但由于它是固定的 20 长度输出,我应该用一些东西填充它的 5 倍?未指定。
为什么有人甚至需要没有分隔符的文件? He/she 无论如何都需要将其分解为单独的字段,这有什么意义?
通常,当您看到固定长度的文件时,您正在处理遗留系统。例如,AS400 通常会吐出带有人工分隔符的固定长度文件(为什么,我不知道,但这是我所看到的)。
通常,字符串右填充空格,数字左填充 0(零)。
这不是绝对的。
这种平面(二进制)文件旨在 faster/easier 由机器读取,并且比以更人性化的表示形式(例如,JSON、CSV , ETC。)。例如,机器可以在读取内容之前预先分配适当数量的内存。
如今,由于 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'
我有一个与任何特定语言无关的理解问题,但由于我在 python 中写作,所以我标记了 python。我被要求在 "fixed length, flatfile without separators" 中提供一些数据。这让我很困惑,因为我是这样理解的:
Input: Column A: date (len6)
Input: Column B: name (len20)
Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]"
"MYVERYSHORTNAME" 只有 15 个字符长,但由于它是固定的 20 长度输出,我应该用一些东西填充它的 5 倍?未指定。
为什么有人甚至需要没有分隔符的文件? He/she 无论如何都需要将其分解为单独的字段,这有什么意义?
通常,当您看到固定长度的文件时,您正在处理遗留系统。例如,AS400 通常会吐出带有人工分隔符的固定长度文件(为什么,我不知道,但这是我所看到的)。
通常,字符串右填充空格,数字左填充 0(零)。
这不是绝对的。
这种平面(二进制)文件旨在 faster/easier 由机器读取,并且比以更人性化的表示形式(例如,JSON、CSV , ETC。)。例如,机器可以在读取内容之前预先分配适当数量的内存。 如今,由于 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'