簡體   English   中英

Python,使用多個列表中的列將新行寫入CSV

[英]Python, Write new line to CSV using columns from multiple lists

到目前為止,我所能找到的只是有關將列表合並在一起的問題。

我正在尋找3個清單(2個清單和一個2D清單)

list1 = [[1,11,12],[2,21,22],[3,31,32]]
list2 = [4,5,6]
list3 = [7,8,9]

並將這些值寫入CSV文件,產生以下// 所需的輸出

Row1,Row2,Row3 
1,4,7 
2,5,8
3,6,9

11,12等不應該寫入CSV文件。

碼:

f = open('file.csv', 'wb')
fileWriter = csv.writer(f)
fileWriter.writerow(['Row1', 'Row2', 'Row3']) # Write header row

嘗試:

listlen = len(list2)
list1len = len(list1)

for i in range(listlen):
    for j in range(listlen):
        for k in range(list1len):
            fileWriter.writerow([list1[k][0],list2[i],list3[j]])

結果:

Row1,Row2,Row3
1,4,7
2,4,7
3,4,7

嘗試:

for A,B,C in list1:
for X in list2:
    for Y in list3:
        tempA = A
        tempX = X
        tempY = Y
        fileWriter.writerow([tempA,tempX,tempY])

結果:

Row1,Row2,Row3
1,4,7
1,4,8
1,4,9
etc. 

當前代碼(兩次嘗試)正在遍歷list2和list3中的所有值,以獲取list1中的每個單個數字值。 在這兩次嘗試之間,我設法做的就是更改所寫數字的順序。

我想做的是寫出每個列表的第一個值,然后寫出第二個,以給出所需的輸出。

如何調整此值以提供所需的輸出/是否有更好的選擇?

僅Python 2.7

添加了我根據阿比吉特的答案創建的解決方案:

result = zip(zip(*list1)[0], list2, list3)

for row in result:
    tempRow = row
    fileWriter.writerow(tempRow)

假設您已經知道編寫csv,並且您可能想知道的部分是訪問數據的一種優雅方式。

訪問數據的一種不錯的方法是使用內置的zip zip([iterable, ...])具有出色的數據轉置能力,您將在這里需要

>>> zip(zip(*list1)[0], list2, list3)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

不幸的是,您正在考慮的目標結果是格式化數據而不是csv,因此即使您將csv寫為制表符分隔的標簽,結果可能也不理想

>>> result = [['row1','row2','row3']] + zip(zip(*list1)[0], list2, list3)
>>> with open('file.csv', 'wb') as fin:
    writer = csv.writer(fin, delimiter = '\t')
    writer.writerows(result)

row1    row2    row3
1   4   7
2   5   8
3   6   9

一種選擇是放棄csv的想法,而是使用str.format將數據寫為格式化字符串。

>>> header = ['row1','row2','row3']
>>> result = zip(zip(*list1)[0], list2, list3)
>>> format_string = "{:<10}{:<10}{:<10}"
>>> with open('file.csv', 'wb') as fin:
    fin.write(format_string.format(*header))
    fin.write('\n')
    for row in result:
        fin.write(format_string.format(*row))
        fin.write('\n')


row1      row2      row3      
1         4         7         
2         5         8         
3         6         9     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM