我有一些列数据,其中一列数据的宽度范围很广。 我想以等宽字体显示这些数据,以便于查看,同时还保留了使用常见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内联感觉不合适。
答案 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