2016-04-12 12 views
0

Aşağıdaki gibi bir csv dosyası var ve temsilci bilgileri (2. ve 3. sütun) dayalı 4. sütun başlayarak harfi (A veya B) dönüştürmek istiyorum. Ancak '0' sayısı '0' olarak kalacaktır. Sonra görebildiğim dönüştürdükten sonraVerilen bilgilere göre harfi dönüştür?

Name, A_Rep,B_Rep,id_1,id_1,id_2,id_2,... # header line 
rs1,  G, T, A, A, A, B,... 
rs2,  A, G, 0, 0, A, B,... 

...

Name, A_Rep,B_Rep,id_1,id_1,id_2,id_2,... 
rs1,  G, T, G, G, G, T,... 
rs2,  A, G, 0, 0, A, G,... 

Aşağıda, kod bitmiş, ama yine de A_Rep = line[1] IndexError: list index out of range mesajı gösteren olduğunu.

import csv 

    input = 'input.csv' 

    with open('output.csv', 'w') as output: 
     data = csv.reader(input, delimiter=',') 
     for line in data: 
      if line[0].startswith('Name'): # Retrieve the header line 
       output.write("{}\n".format(','.join(line))) 
      else: 
       stuff = [] 
       Name = line[0] 
       A_Rep = line[1]  ##IndexError: list index out of range 
       B_Rep = line[2]  ##IndexError: list index out of range 
       for samplefield in line[3:]: 
        if samplefield == 'A': 
         stuff.append(A_Rep) 
        elif samplefield == 'B': 
         stuff.append(B_Rep) 
        elif samplefield == '0': 
         stuff.append('0') 
        else: 
         sys.exit('Check: {}'.format(','.join(line))) 
       output.write("{},{},{},{}\n".format(Name, A_Rep, B_Rep, ','.join(stuff))) 

Bunu nasıl çözeceğini bilen var mı, yoksa aynı hedefi yapmanın etkili bir yolu mu?

+4

Sen kullanamazsınız '-' değişken isimlerinde. bu, semantik olarak çıkarmaya eşittir. –

+1

Bu garip. Bu satırdaki * "SyntaxError: operatöre atanamaz" olmanız gerekir. Bunun programınızın kesin bir kopyası olduğuna emin misin? –

+1

python 2.7 kullandığınızdan emin misiniz? çıktı ne için: 'import sys print (sys.version)' –

cevap

1

düzgün dosya işleyicisi kullanmıyorsanız, ben böyle mantık yukarıda uygulayacağını:

with open("input.csv") as inputFile, open("output.csv", 'w') as outputFile: 
    outCsv = csv.writer(outputFile, delimiter=',') 
    inCsv = csv.reader(inputFile, delimiter=',') 

    header = next(inCsv) 
    outCsv.writerow(header) 

    for line in inCsv: 
     newLine = line[0:3] 
     for value in line[3:]: 
      value = value.strip() 
      code = { 
       'A': line[1], 
       'B': line[2], 
       '0': value 
      } 
      newLine.append(code[value]) 

     outCsv.writerow(newLine)