【问题标题】:fixed length flat file without separators不带分隔符的固定长度平面文件
【发布时间】:2017-09-04 08:33:26
【问题描述】:

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

Input: Column A: date (len6)

Input: Column B: name (len20)

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

“MYVERYSHORTNAME”只有 15 个字符长,但由于它是固定的 20 长度输出,我应该用一些东西填充 5 倍吗?没有具体说明。

为什么有人甚至需要一个没有分隔符的文件?无论如何,他/她都需要将其分解为单独的字段,这有什么意义?

【问题讨论】:

  • 重点可能是能够以二进制形式将其作为大小固定的字段文件(数据库)读取
  • 某些框架可能需要这种格式,例如 ISO8583。

标签: python flat-file


【解决方案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'

【讨论】:

  • 您能否确认我必须在右边用空格填充不够长的字段,在左边用零填充不够长的数字?
  • 是的,您必须在每个字段中填充任何不够长的值。现在填充边和填充字符由您决定(这是一个设计决定),您只需要在写作和阅读之间保持一致。通常数字左填充 0 或空字符,字符串右填充空字符(空字符 = 所有位为 0 的字符)。
【解决方案2】:

通常,当您看到固定长度的文件时,您处理的是遗留系统。例如,AS400 通常会输出带有人工分隔符的固定长度文件(为什么,我不知道,但这就是我所看到的)。

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

这不是绝对的。

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多