如何在变量中存储列值

时间:2014-11-25 02:43:40

标签: python variables dictionary tsv

我正在处理包含多个列的制表符分隔文件。每列包含超过3000条记录。

Column1     Column2  Column3     Column4
1000041     11657    GenNorm     albumin
1000043     24249    GenNorm     CaBP
1000043     29177    GenNorm     calcium-binding protein
1000045     2006     GenNorm     tropoelastin

问题:使用Python,如何读取制表符分隔文件并将每个列(及其记录)存储在单个变量中。使用“print”打印出特定的列

初步代码:到目前为止,我使用此代码来读取tsv文件

import csv
Dictionary1 = {}

with open("sample.txt", 'r') as samplefile:
        reader = csv.reader(samplefile, delimiter="\t")

2 个答案:

答案 0 :(得分:1)

我认为你只是在问如何转换"从一系列行到一系列列的CSV文件。

在Python中,您始终可以使用zip函数转置任何可迭代的迭代:

with open("sample1.txt") as samplefile:
    reader = csv.reader(samplefile, delimiter="\t")
    columns = zip(*reader)

现在,如果要按顺序打印每列:

for column in columns:
    print(column)

这里,columns是元组的迭代器。如果您想要其他格式,例如将列名称映射到值列表的dict,您可以轻松地对其进行转换。例如:

columns = {column[0]: list(column[1:]) for column in columns}

或者,如果你想把它们放在四个单独的变量中,你可以使用普通的元组解包:

col1, col2, col3, col4 = columns

但这似乎并不是一个很好的理由。

答案 1 :(得分:-1)

不确定python中的代码但使用此循环。将所有内容存储到字典中然后使用此循环然后使用该函数调用索引以打印方法,您可以修改函数以适应您想要的密钥,您可以通过单词搜索等

int mainCounter = 0;
int counter1 = 0;
string arrColumn1[3000];

int counter2 = 0;
string arrColumn1[3000];

int counter3 = 0;
string arrColumn1[3000];

int counter4 = 0;
string arrColumn1[3000];

for(int i = 0; i<dictionary.length; ++i){
      switch ( mainCounterounter )
      {
         case 0:
            arrColumn1[counter1] = dictionary[i];
            ++counter1;
            ++mainCounter;
            break;
         case 1:
            arrColumn2[counter2] = dictionary[i];
            ++counter2;
            ++mainCounter;
            break;
         case 2:
            arrColumn3[counter3] = dictionary[i];
            ++counter3;
            ++mainCounter;
            break;
         case 3:
            arrColumn4[counter4] = dictionary[i];
            ++counter4;
            mainCounter = 0;
            break;
      }
}

void printRecordFunction(int colToSearch, string findThis, string arr1[], string arr2[], string arr3[], string arr4[]){

int foundIndex=0;


if(colToSearch == 1){
      for(int i = 0; i<arr1.length; ++i){
           if(strcmp(arr1[i], findthis)==0){
                foundIndex = i;
                break;
           }
      }
}else if(colToSearch == 2){
      for(int i = 0; i<arr2.length; ++i){
           if(strcmp(arr2[i], findthis)==0){
                foundIndex = i;
                break;
           }
      }
}else if(colToSearch == 3){
      for(int i = 0; i<arr3.length; ++i){
           if(strcmp(arr3[i], findthis)==0){
                foundIndex = i;
                break;
           }
      }
}else if(colToSearch == 4){
      for(int i = 0; i<arr4.length; ++i){
           if(strcmp(arr4[i], findthis)==0){
                foundIndex = i;
                break;
           }
      }
}

count<<"Record: " << arr1[i] << " " << arr2[i] << " " << arr3[i] << " " << arr4[i] << endl;

}

对不起,这是非常难的代码,但我希望它能给你一些想法,你可以调整它