Write lists of different size to csv in columns in Python

前端 未结 2 558
不知归路
不知归路 2021-01-23 07:39

I need to write lists that all differ in length to a CSV file in columns.

I currently have:

d=lists
writer = csv.writer(fl)
for values in zip(*d):
    wr         


        
相关标签:
2条回答
  • There's no 'neat' way to write it since, as you said, zip truncates to the length of the shortest iterable.

    Probably the simplest way would be to just pad with None or empty strings (Not sure offhand what the behavior of writerow is with None values):

    maxlen = max([len(member) for member in d])
    [member.extend([""] * (maxlen - len(member))) for member in d]
    for values in zip(*d):
        ...
    

    Alternatively, you could just construct each row inside the for loop instead of using zip, which would be more efficient but a lot wordier.

    EDIT: corrected example

    0 讨论(0)
  • 2021-01-23 08:39

    Code below is for Python 3. If you use Python 2, import izip_longest instead of zip_longest.

    import csv
    from itertools import zip_longest
    
    d = [[2,3,4,8],[5,6]]
    
    with open("file.csv","w+") as f:
        writer = csv.writer(f)
        for values in zip_longest(*d):
            writer.writerow(values)
    

    Result:

    2,5
    3,6
    4,
    8,
    
    0 讨论(0)
提交回复
热议问题