2017-01-07 1 views
0

이 정수 데이터를 처리하는 방법 :으로 나는 <strong>fileA.txt</strong>이 어떻게 파일

000001 
0012 
1122 
00192 
.. 

파일에 대한 25킬로바이트 모든 라인에 어떤 임의의 번호입니다.

f = open('fileA.txt', 'r') 
content = f.readlines() 
nums = [ int(x.rstrip('\n')) for x in content] 
print nums 
f.close() 

출력 :

[1, 12, 1122, 192] 

나는이 시도

00000001 
00000012 
00000112 
00000192 

:

나는 아래의 출력과 같은 8 자리 수정 길이으로 모든 번호를 다시 정렬하려면 나는이 숫자와 심지어 list-compressio를 재정렬하고 싶다. n은 원본 파일을 위해 여기에서 교수형 당합니다. 이 작업을 수행하는 방법?

답변

3
with open('test.txt') as f: 
    for line in f: 
     f_line = '{:08}'.format(int(line)) 
     print(f_line) 

아웃 :

00000001 
00000012 
00001122 
00000192 

목록 이해 :

with open('test.txt') as f: 
    lst = ['{:08}'.format(int(line)) for line in f] 

아웃 :

['00000001', '00000012', '00001122', '00000192'] 

.

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] 

폭은 최소 필드 폭을 정의 진수 정수이다. 이 지정되지 않으면 필드 폭은 내용에 의해 결정됩니다. 너비 필드 앞에 0 ('0') 문자를 붙이면은 부호 인식 숫자 형식에 대해 0을 채 웁니다. 이것은 정렬 유형이 '='인 채우기 문자 이 '0'과 동일합니다.

format string syntax

2

zfill 방법을 사용하여 숫자를 '0'으로 채울 수 있습니다.

nums = [ x.rstrip('\n').zfill(8) for x in content] 
+0

그래, 거기에리스트 압축을 어떻게 처리 할까? –

2

사용 str.format이 할 :

0
>>> with open('nums.txt') as f: 
...  for line in f: 
...   print('{:0>8}'.format(line.strip())) 
... 
00000001 
00000012 
00001122 
00000192 

채우기 문자, >는 오른쪽 정렬을 지정하고 8이 채워진 문자열의 폭이다.

2

파일이 너무 큰 경우 모든 데이터를 함께로드하고 처리하지 마십시오. 대신 하나씩 라인을 읽고 각 라인을 하나씩 처리하십시오.

with open('fileA.txt', 'r') as f: 
    with open('fileB.txt', 'w') as o: # newfile to fixed 
     for line in f: 
      val = line.strip('\n').zfill(8) 
      print val 
      o.write(val + '\n') 
관련 문제