如何在python中调整csv文件的单元格宽度?

时间:2013-04-19 06:35:33

标签: python csv python-2.7

我正在使用此代码编写csv文件

import csv

data = [[1,'more width cell',3],[4,5,6],[7,8,9]]
item_length = len(data[0])

with open('test.csv', 'wb') as test_file:
  file_writer = csv.writer(test_file)
  for i in range(item_length):
    file_writer.writerow([x[i] for x in data])

现在输出

1   ,4,7
more,5,8
3   ,6,9

我想要

 1,              ,4,7
 more width cell ,5,8
 3               ,6,9

现在所有单元格的宽度都相同。如何增加更宽的单元格单元格的宽度?

2 个答案:

答案 0 :(得分:0)

  

现在输出

1,more,7
2,5,8
3,6,9

不,不是。当我运行你的代码时,我得到了

1,4,7
more width cell,5,8
3,6,9

......这应该是应有的。一个正确的CSV文件只是 - 逗号分隔的值,没有填充。它没有"长度"的概念。除了每个值都有一个特定的长度,这只是该特定值的长度。如果要将第一列填充到特定长度,请将值更改为填充(即将"1"替换为"1 " - 为消除歧义添加引号。)

答案 1 :(得分:0)

行按顺序写入,因此您需要提前知道每列的列宽是多少。这可能需要在输出之前迭代数据以确定每列的宽度。

确定列宽后,可以根据所需宽度格式化该列的输出。使用Python string.format()功能可以提供很大的灵活性。

这样的事可能有用:

def expanded_row_data(row_data, col_widths):
    """Return list of strings, with modified column widths
    `col_width` is list of integer column widths.
    """
    return [ '{0:<{width}}'.format(d, width=width) for
      (d, width) in zip(row_data, col_widths) ]

col_widths = calc_col_width(data) # <--- Write this function to determine column widths.

with open('test.csv', 'wb') as test_file:
  file_writer = csv.writer(test_file)
  for i in range(item_length):
    file_writer.writerow(expanded_row_data([x[i] for x in data], col_widths))