Последняя запись вставляется на один ряд ниже, где она должна быть - PullRequest
0 голосов
/ 31 марта 2020

Этот скрипт должен открыть «P01_3.csv», переименовать его записи (из столбца «type») и сохранить их в «OGT_files.csv»:

«P01_3.csv» выглядит следующим образом:

number  latency duration        channel bvtime  bvmknum type    code    urevent
1.000000        0.002000        NaN     0.000000        -1382658386.000000      1.000000        boundary        New Segment     1.000000
2.000000        0.042000        0.002000        0.000000                2.000000        actiCAP Data On Comment 2.000000
3.000000        12.566000       0.002000        0.000000                3.000000        S  4    Stimulus        3.000000
4.000000        13.586000       0.002000        0.000000                4.000000        TriODD  Stimulus        4.000000
5.000000        16.462000       0.002000        0.000000                5.000000        Hit     Stimulus        5.000000
6.000000        17.486000       0.002000        0.000000                6.000000        MP1     Stimulus        6.000000
7.000000        18.070000       0.002000        0.000000                7.000000        Hit     Stimulus        7.000000
8.000000        19.102000       0.002000        0.000000                8.000000        TriODD  Stimulus        8.000000
9.000000        22.662000       0.002000        0.000000                9.000000        Hit     Stimulus        9.000000
10.000000       23.686000       0.002000        0.000000                10.000000       MP2     Stimulus        10.000000
11.000000       24.230000       0.002000        0.000000                11.000000       Hit     Stimulus        11.000000
12.000000       25.254000       0.002000        0.000000                12.000000       TriPMC  Stimulus        12.000000
13.000000       28.318000       0.002000        0.000000                13.000000       False   Stimulus        13.000000
14.000000       29.336000       0.002000        0.000000                14.000000       MP3     Stimulus        14.000000
15.000000       30.038000       0.002000        0.000000                15.000000       Hit     Stimulus        15.000000

мой код выглядит так:

OGT_files = open('OGT_files.csv','w')
OGT_files.write(str("Subj"+"\t"+"Run"+"\t"+"Event_type"+"\t"+"Event_number"+"\t"+"Accuracy"+"\t"+"Latency"+"\n"))

liste = []
rabo = []

file = open("../p01_3.csv","r")
file.seek(0) # Always beginns from the line 1
for line in file: # For loop across the file
    line = line.split("\t")
    liste.append(line[6])

    Event_number = line[8]
    Latency = line[1]

    if line[6] == "Hit" and liste[-2] == 'TriODD': # Hit_OGT 1 - ODD
        rabo.append("Hit_ODD_1")
        OGT_files.write("\t\t"+"Hit_ODD_1"+"\t"+str(Event_number)+"\t"+str(Latency)+"\n")
    elif line[6] == "Hit" and liste[-2] == 'TriEVE': # Hit_OGT 1 - EVE
        rabo.append("Hit_EVE_1")
        OGT_files.write("\t\t"+"Hit_EVE_1"+"\t"+str(Event_number)+"\t"+str(Latency)+"\n")
    elif line[6] == "Hit" and liste[-2] == 'TriPMC': # Hit_PMC 1
        rabo.append("Hit_PMC_1")
        OGT_files.write("\t\t"+"Hit_PMC_1"+"\t"+str(Event_number)+"\t"+str(Latency)+"\n")

file.close()
OGT_files.close()

Вывод:

Subj    Run Event_type  Event_number    Accuracy    Latency
        Hit_ODD_1   5.000000
    16.462000
        Hit_ODD_2   7.000000
    18.070000
        Hit_ODD_1   9.000000
    22.662000
        Hit_ODD_2   11.000000
    24.230000
        False_PMC_1 13.000000
    28.318000 ...

Вывод моего кода вставляет ' Латентность «на одну строку ниже, где это должно быть (и под столбцом« Выполнить »вместо столбца« Задержка »). Как я могу настроить код для решения этой проблемы?

1 Ответ

0 голосов
/ 31 марта 2020

Вы можете использовать библиотеку csv для эффективности python csv docs

Ваш код должен выглядеть следующим образом

import csv 
with open("../p01_3.csv","r") as csv_to_read, open("../p01_3.csv","r") as csv_to_write:
csv_reader = csv.reader(csv_to_read, delimiter='\t')
csv_writer = csv.writer(csv_to_write, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL)

line_count = 0
for row in csv_reader:
    if line_count == 0:
        #skip first line as you want
        pass
    #do what you want: you can use csv_writer.writerow(stuffToWritehere) and 
    #row[0], row[1], etc to refer to the different columns etc.
...