2014-01-16 4 views
0

중첩 된 목록의 요소를 파일의 개별 줄에 쓰려고합니다. 각 요소는 탭 문자로 구분됩니다.탭으로 구분 된 파일 출력이 일치하지 않습니다.

('A', 'B', 'C', 'D') 

는 최종 출력 형식이어야합니다 : 중첩 된 목록의 각 양식은 다음과

A B C D 
E F G H 
. . . . 
. . . . 

하지만, 내 출력은 출력이의되도록 재현 불일치를 갖고있는 것 같아요 일반 형식 :

A B C D 
E F G H 
I J K L 
M N O P 
. . . . 
. . . . 

필자는 목록을 작성하기 전에 검사했으며 형식이 동일하게 보입니다. 내가 쓰고 사용하고 코드는 다음과 같습니다

with open("letters.txt", 'w') as outfile: 
    outfile.writelines('\t'.join(line) + '\n' for line in letter_list) 

중요한 것은, 내가 바꿀 경우 '\ t'으로, 예를 들어, '|'파일은 일관성없이 작성됩니다. 공백 구문 분석은 특정 파일 I/O 작업에서 문제가 될 수 있지만 여기에서 문제를 해결하는 방법을 알지 못합니다.

시간 내 주셔서 감사합니다.

EDIT : 여기 일부 실제 입력 (중첩 된리스트 형태로) 데이터를 출력한다 :

('5', '+', '5752624-5752673', 'alt_region_8161'), ('1', '+', '621461-622139', 'alt_region_67'), ('1', '+', '453907-454063', 'alt_region_60'), ('1', '+', '539611-539815', 'alt_region_61'), ('4', '+', '14610049-14610103', 'alt_region_6893'), ('4', '+', '14610049-14610144', 'alt_region_6895'), ('4', '+', '14610049-14610144', 'alt_region_6897'), ('4', '+', '14610049-14610144', 'alt_region_6896')] 

IN OUT

4 + 12816011-12816087 alt_region_6808 
1 + 21214720-21214747 alt_region_2377 
4 + 9489968-9490833 alt_region_7382 
1 + 12121545-12126263 alt_region_650 
4 + 9489968-9490811 alt_region_7381 
4 + 12816011-12816087 alt_region_6807 
1 + 2032338-2032740 alt_region_157 
5 + 4695084-4695628 alt_region_9316 
1 + 22294677-22295134 alt_region_2424 
1 + 22294677-22295139 alt_region_2425 
1 + 22294677-22295139 alt_region_2426 
1 + 22294677-22295139 alt_region_2427 
1 + 22294677-22295134 alt_region_2422 
1 + 22294677-22295134 alt_region_2423 
1 + 22294384-22295198 alt_region_2428 
1 + 22294384-22295198 alt_region_2429 
5 + 20845105-20845211 alt_region_9784 
5 + 20845105-20845206 alt_region_9783 
3 + 2651447-2651889 alt_region_5562 

EDIT : 주석 모두 덕분. 죄송합니다 질문이 잘못 표현 된 경우. 문제를 명확히하는 데 도움을 주셔서 감사합니다 (또는 분명히 비 문제).

+1

출력을 여기에 복사 했습니까? 다시 입력 했습니까? – senshin

+0

요소의 길이는 얼마나됩니까?예를 들어'G'가 실제로 5 문자 길이라면 몇 가지 문제를 설명 할 수 있습니다. –

+0

@LegoStormtroopr 요소가 내 예제보다 더 다양합니다. 다음은 실제 예입니다. 5 \t + 16665283-16667171 alt_region_9644 – glarue

답변

1

일부 텍스트 편집기에서는 탭이 이와 같이 표시됩니다. 파일의 내용이 정확합니다. 파일이 화면에 표시되는 방법과 관련이 있습니다. 탭으로 발생하지만 |을 사용하면 발생하지 않는 이유는 |이 아닙니다.

+0

고마워요. 아마 이것처럼 보입니다. 알지 못하는 사람들에게 좌절감을 안겨줍니다. – glarue

+0

TSV 파일로 작업 할 때도 똑같은 것을 경험했습니다. –

3

출력에 공백 (' ')이없고 탭 ('\t') 만 있습니다.

>>> print(repr('1 + 21214720-21214747 alt_region_2377')) 
'1\t+\t21214720-21214747\talt_region_2377' 
    ^^ ^^     ^^ 

탭 (대부분의 편집자) 공간의 고정 된 수에 상응하지 이다. 그 대신 탭 뒤의 문자를 x 문자의 다음 여백으로 옮깁니다. 여기에서 x이 다양합니다. x이 가장 일반적으로 8이지만, 여기에서는 4입니다. 육안으로 정렬 표시에 당신이 당신의 출력을 원하는 경우

>>> for i in range(7): 
    print('x'*i+'\tx') 


    x 
x x 
xx x 
xxx x 
xxxx x 
xxxxx x 
xxxxxx x 

, 당신은 string formatting 사용해야하지만

>>> for line in data: 
    print('{:4} {:4} {:20} {:20}'.format(*line)) 


5 + 5752624-5752673  alt_region_8161  
1 + 621461-622139  alt_region_67  
1 + 453907-454063  alt_region_60  
1 + 539611-539815  alt_region_61  
4 + 14610049-14610103 alt_region_6893  
4 + 14610049-14610144 alt_region_6895  
4 + 14610049-14610144 alt_region_6897  
4 + 14610049-14610144 alt_region_6896 

참고,이 반드시 코드를 읽을 수 없음을 탭으로 구분 된 값 파일을 필요로합니다.

+0

부록 추가해 주셔서 감사합니다. 사실 내 모든 경우에 내가 신경 쓰는 것은 정확한 알고리즘 파싱이다. 이것은 일반적인 적용 가능성을 가진 좋은 팁이다. – glarue

관련 문제