Python编写/创建具有固定宽度列的csv

时间:2015-04-21 17:20:11

标签: python csv

我有一些列数据,其中一列数据的宽度范围很广。 我想以等宽字体显示这些数据,以便于查看,同时还保留了使用常见csv处理程序解析数据的功能。

我愿意接受解析lib可能需要进行strip / trim操作,我并不担心保留前导/尾随空格。

如何编写固定宽度数据列的csv?这可能是csv模块吗?

在Open / Libre Office术语中,这在“导出文本文件”选项中称为“固定列宽”。

实施例

data = [
    ('Brown Fox Jumps Over', 'Lorem ipsum',),
    ('The Lazy', 'dolor sit amet,',),
    ('Dog', 'consectetur adipiscing elit.',),
]

期望的输出

"Header 1            ", "Header 2                    ",
"Brown Fox Jumps Over", "Lorem ipsum                 ",
"The Lazy            ", "dolor sit amet,             ",
"Dog                 ", "consectetur adipiscing elit.",

首先,我正在寻找一种工具来扫描数据集中最宽的值,然后将整个列格式化为所有列的宽度,因为writing one myself内联感觉不合适。

1 个答案:

答案 0 :(得分:3)

使用str.format

In [1]: '{0: <10}'.format('lorem')
Out[1]: 'lorem     '

In [2]: '{0: <10}'.format('lorem ipsum')
Out[2]: 'lorem ipsum'

类似的东西,

lines = ['lorem ipsum', 'dolor sit amet']

with open('foo.txt', 'w') as foo:
   for line in lines:
       words = line.split()
       formatted = ' '.join(['{0: <5}'.format(word) for word in words])
       foo.write(formatted + '\n')

$ cat foo.txt
lorem ipsum
dolor sit   amet

然后你可以使用pandas来优雅地阅读它

In [1]: df = pd.read_fwf('foo.txt', colspecs=[(0,5),(6,11),(12,17)], header=None)

In [2]: df
Out[2]:
       0      1     2
0  lorem  ipsum   NaN
1  dolor    sit  amet