2017-09-04 2 views
0

나는 특정 언어와 관련이없는 이해력 질문을 가지고 있지만 파이썬으로 글을 쓰고 있기 때문에 파이썬에 태그를 추가했습니다. 필자는 "고정 길이, 분리 기호없이 플랫 파일"로 데이터를 제공해야합니다.구분 기호가없는 고정 길이 플랫 파일

Input: Column A: date (len6) 

Input: Column B: name (len20) 

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

"MYVERYSHORTNAME"15 문자 긴하지만, 20 길이의 출력을 고정 이후, 나는 뭔가 5 번 채우도록 하죠 : 그것은 내가 좋아하는 이해하기 때문에, 저를 혼란? 그것은 지정되지 않았습니다.

왜 사람이 구분 기호없이 파일을 필요로합니까? 그/그녀는 분리 된 분야로 그것을 어쨌든 나누어야 할 것입니다, 요점은 무엇입니까?

+0

점은 아마도

파이썬에서, 이진 파일 이런 종류의 적절하게 대처하기 위해, 당신은 예를 들어, 표준 라이브러리에서 struct 모듈을 사용할 수 있습니다 크기가 고정 된 필드 파일 (데이터베이스)로 이진 형식으로 읽을 수 있습니다. –

+0

일부 프레임 워크는 ISO8583과 같이이 형식을 요구할 수 있습니다. –

답변

1

이러한 종류의 플랫 (이진) 파일은 컴퓨터가 더 빠르고 쉽게 읽을 수 있도록 설계되었으며, 인간 친화적 인 표현 (예 : JSON, CSV 등)을 사용하면 이에 비해 메모리가 더 효율적입니다. 예를 들어, 기계는 내용을 읽기 전에 적절한 양의 메모리를 사전 할당 할 수 있습니다. RAM의 크기와 동적 특성이 사실상 무제한이므로 아무도 플랫 파일을 더 이상 사용하지 않습니다 (특별히 필요하지 않는 한). 이 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으로 채웠다는 것을 확인해 주시겠습니까? – dgan

+0

예. 각 필드에 갈 수있을만큼 길지 않은 값을 채워야합니다. 이제 패딩면과 패딩 문자는 당신에게 달렸습니다 (디자인 결정이었습니다), 당신은 쓰기와 읽기 사이의 일관성을 유지해야합니다. 일반적으로 숫자에는 0 또는 널 문자가 채워지고 문자열에는 널 문자 (null 문자 = 모든 비트가 0 인 문자)가 오른쪽으로 채워집니다. – Guillaume

1

일반적으로 고정 길이 파일을 볼 때 레거시 시스템을 사용하고 있습니다. 예를 들어 AS400은 대개 인위적 구분 기호로 고정 길이 파일을 뱉어냅니다 (왜 그런지 모르지만 그게 내가 본 것입니다).

일반적으로 문자열에는 공백이 오른쪽으로 채워지며 숫자에는 0으로 제 공됩니다 (제로).

이것은 절대적인 것은 아닙니다.

관련 문제