无分隔符定尺平锉

2024-09-30 01:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Input: Column A: date (len6)

Input: Column B: name (len20)

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

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

为什么有人甚至需要一个没有分隔符的文件?他/她需要把它分解成不同的字段,这有什么意义?你知道吗


Tags: 文件数据name语言inputoutputdatecolumn
2条回答

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

通常,字符串用空格右填充,数字用0(零)左填充。你知道吗

这不是绝对的。你知道吗

这种平面(二进制)文件意味着机器可以更快/更容易地读取,并且比更人性化的表示形式(如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'

相关问题 更多 >

    热门问题