2014-01-16 70 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操作的問題,但我不知道如何在此處進行故障排除。

謝謝你的時間。

編輯:這裏是一些實際的輸入數據(在嵌套列表形式)和輸出:

IN

('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')] 

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 

編輯:謝謝大家誰評論。對不起,如果這個問題措辭不佳。我很感謝在澄清問題方面的幫助(或者顯然是非問題)。

+1

你在這裏複製你的輸出,還是你重新輸入了它? – senshin

+0

元素有多長?例如,如果'G'實際上是5個字符,可以解釋一些問題。 – 2014-01-16 23:55:52

+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,儘管它在SO上是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

相關問題