Я пытаюсь сделать что-то, что, вероятно, не так сложно в Python (2.7.6), но я нигде не приближаюсь к решению. Это относится к эксперименту fMRI (в частности, к истечению срока годности). У меня есть CSV-файл, который выглядит примерно так:python csv для вложенных списков, счетчик
level,string,key
1,string11,1
1,string12,0
1,string13,1
2,string21,1
2,string22,1
2,string23,0
Есть 20 уровней (1:20), то CSV имеет около 5000 записей. То, что я хотел бы сделать, представляет строку из второго столбца с определенного уровня (начальный уровень определяется заранее). Так, например, мы протестировали объект и определили, что они начнутся на уровне 5. Случайная строка представлена на уровне 5 (например, «корова - это животное»). Субъект нажимает кнопку для истинного/ложного (ответ в колонке «ключ» - 1/0). Сложный бит состоит в том, что каждые 4 последовательных правильных ответа уровень увеличивается на 1, неправильный ответ уменьшает уровень на 1.
Сроки/эффективность несколько важны, поэтому я думал, что csv можно проанализировать заранее, часть работы во время эксперимента - это просто доступ к данным, хранящимся на уровне. Я посмотрел на вложенные словари, похоже, не прав. Возможно, вложенные списки? Я немного из глубины. Я написал рабочий пример в bash, если это более ясно, чем мое объяснение.
#!/bin/bash
csv="file.csv"
level="5"
ilevel="0"
counter="1"
while [ "$counter" -le 10 ]; do
stim=$(awk -F',' -v l="$level" '{if($1==l) print $2","$3}' "$csv"|sort -R|head -n1)
stim1=$(echo "$stim"|cut -d',' -f1)
stim2=$(echo "$stim"|cut -d',' -f2)
read -p "$stim1 (t/f): " ANS
if [[ "$stim2" == "1" && "$ANS" == "t" || "$stim2" == "0" && "$ANS" == "f" ]]; then #if correct
ilevel=$(echo "scale=2;$ilevel+.25"|bc) #add .25 to ilevel counter
if [[ "$ilevel" == "1.00" ]]; then
if [[ "$level" < "20" ]]; then
level=$(echo "$level+1"|bc) #increase level
fi
ilevel=0
fi
else
if [[ "$level" > "1" ]]; then #if incorrect
level=$(echo "$level-1"|bc) #decrease level
fi
ilevel=0
fi
let "counter += 1"
done
Баш скрипт только для целей рабочего примера - счетчик, печать на экран, пользователь обратной связи .. это все обрабатывается по-разному в реальности, и это уже сделано. Мне просто нужно выяснить сортировку csv и манипулировать уровнем. Спасибо заранее за любые предложения.
Я все еще не понимаю. Что именно вы хотите сделать, манипулируя доступным рабочим CSV-файлом? Не могли бы вы вручную показать, что вы подразумеваете под манипуляцией? – Mehdi
Спасибо за ваш комментарий, но я не думаю, что я могу объяснить это лучше, и пример bash показывает общую идею. – user4987992