我正在使用此代码编写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
现在所有单元格的宽度都相同。如何增加更宽的单元格单元格的宽度?
答案 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))