2

我正在使用此代码编写 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

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

4

2 回答 2

0

现在输出是

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

不,这不对。当我运行你的代码时,我得到

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

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

于 2013-04-19T07:17:14.513 回答
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))
于 2013-04-19T07:17:14.487 回答