首頁>Program>source

我是指令碼新手.我有一张桌子( Table1.txt ),我需要建立另一个表,该表的Table1行按列排列,反之亦然.對於Perl和SQL,我找到了解決此問题的方法,但是對於Python,却没有找到解決方法。

两天前我才刚開始學習Python,所以据我所知:

import csv
import sys
with open(sys.argv[1], "rt") as inputfile:
   readinput = csv.reader(inputfile, delimiter='\t')
   with open("output.csv", 'wt') as outputfile:
      writer = csv.writer(outputfile, delimiter="\t")
      for row in readinput:
            values = [row[0], row[1], row[2], row[3]]
            writer.writerow([values])

這只是將列複製為列.我現在想做的就是將最後一行寫為 writer.writecol([values]) 但是似乎没有這樣的命令,而且我還没有找到將行寫為列的另一種方法。

最新回復
  • 5月前
    1 #

    一般而言,轉置可迭代序列的解決方案是:zip(* original_list)< / p>

    樣本輸入:

    1   2   3   4   5
    6   7   8   9   10
    11  12  13  14  15
    

    program:

    with open('in.txt') as f:
      lis = [x.split() for x in f]
    for x in zip(*lis):
      for y in x:
        print(y+'\t', end='')
      print('\n')
    

    output:

    1   6   11  
    2   7   12  
    3   8   13  
    4   9   14  
    5   10  15
    

  • 5月前
    2 #

    @Ashwini的答案很完美.魔術發生在

    zip(*lis)
    

    让我解釋一下它為什麼起作用:zip接收(在最簡單的情况下)两个列表,然後"壓縮"它们: zip([1,2,3], [4,5,6]) 將成為 [(1,4), (2,5), (3,6)] .因此,如果您將外部列表视為矩陣,將內部元組视為行,則這是一種換位(即,我们將行變成了列).

    現在, zip 是任意Arity的函式,因此它可能需要两个以上的引數:

    # Our matrix is:
    # 1 2 3
    # 4 5 6
    # 7 8 9
    zip([1,2,3], [4,5,6], [7,8,9])
    >>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    # Now it is
    # 1 4 7
    # 2 5 8
    # 3 6 9
    

    我们面临的問题是,在您的情况下,我们不知道我们想傳遞给 zip多少个引數 .但是至少,我们已经知道了這些論點:它们是 lis的要素 ! lis 是一个列表,该列表的每个元素也都是一个列表(對應於輸入檔案中的一行數字).維兹威兹 只是Python告诉函式的一種方法"請使用以下所有元素作為引數,而不是事物本身!"

    所以

    *
    

    完全相同
    lis = [[1,2,3], [4,5,6]]
    zip(*lis)
    

    恭喜,您現在是Python专業人士! ;-)

  • 5月前
    3 #

    既然我们在谈論列,行和轉置,也许值得一提 zip([1,2,3], [4,5,6])

    numpy
    

  • 5月前
    4 #

    這是一種方法,為簡單起见,假設您只想按順序print出物件:

    >>> import numpy as np
    >>> x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
    >>> x
    array([[ 1,  2,  3],
           [ 4,  5,  6],
           [ 7,  8,  9],
           [10, 11, 12]])
    >>> x.T
    array([[ 1,  4,  7, 10],
           [ 2,  5,  8, 11],
           [ 3,  6,  9, 12]])
    

    因為您需要一个陣列才能傳遞给 # lets read all the data into a big 2d array buffer = [] for row in readinput: values = [row[0], row[1], row[2], row[3]] buffer.append(values) # what you have in your code for i in range(len(buffer)): for j in range(len(buffer[0])): print buffer[i][j] # this is called a transpose; we have buffer[i][j] to read row then column, # switch i and j around to do the opposite for i in range(len(buffer[0])): for j in range(len(buffer)): print buffer[j][i] ,您可以這樣做

    writer.writerow
    

  • 5月前
    5 #

    只需在@Akavall答案上構建,如果您想从檔案中讀取,轉置然後再次儲存就可以了:

     for i in range(len(buffer[0])):
          writer.writerow([buffer[j][i] for j in range(len(buffer))])
    

    from numpy import genfromtxt, savetxt data = genfromtxt('in.txt') savetxt('out.txt',data.T) 第三行是資料轉置的位置。

    data.T

  • windows phone 7:使用Silverlight在wP7應用程式中顯示GIF
  • css:柔性盒模型-顯示:flex,box,flexbox?