制表符分隔的文件输出不一致

时间:2014-01-16 23:51:05

标签: python-2.7 delimiter

我试图将嵌套列表中的元素写入文件中的各个行,每个元素由制表符分隔。每个嵌套列表都具有以下形式:

('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操作的问题,但我不知道如何解决它。

感谢您的时间。

编辑:这是一些实际输入数据(以嵌套列表形式)和输出:

('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
编辑:感谢所有评论的人。对不起,如果问题措辞不当。我很感谢帮助澄清问题(或者,显然,没有问题)。

2 个答案:

答案 0 :(得分:3)

输出中没有空格(' '),只有标签('\t')。

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

标签等同于固定数量的空格(在大多数编辑器中)。相反,他们会将标签后面的字符移动到左边距的x字符的下一个可用倍数,其中x变化 - x最常见的是8,尽管此处为4 SO。

>>> 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   

但是,请注意,对于需要使用制表符分隔的值文件的代码,这不一定是可读的。

答案 1 :(得分:1)

在某些文本编辑器中,标签会像这样显示。文件的内容是正确的,只是文件在屏幕上的显示方式。它与标签一起发生但不与|一起发生,这就是您在使用|时没有看到它的原因。