2016-07-11 4 views
1

Я пытаюсь записать содержимое списка в один столбец в файле csv. Хотя я делал это в прошлом, я не могу заставить этот скрипт работать. Вместо этого я все столбцы заполнены вместо строкЗапись содержимого списка в один столбец csv

#getting values for p vlue of 1%-100%   
a = [numpy.arange(.01,1.01,.01)] 
for i in a: 
    with open("GFOLD_Hisat2.csv", 'wb') as file3: 
     filewriter = csv.writer(file3) 
     filewriter.writerow(score(list1, list2, i)) 

Где счет() является функцией, которая выводит целое число

Любые мысли о том, что я должен изменить?

+0

Ну каковы песни1 и песни2? являются ли они фактическими списками, потому что это меняет вещи? Также вы пытались взять «val» из своих скобок, не уверены, что вам нужны эти – SAMO

+1

. Вы должны изменить свой вопрос, чтобы показать, что такое 'list1' и' list2', какой ваш желаемый результат и какой ваш фактический результат. –

+0

Я немного изменил код, чтобы упростить его. – Labrat

ответ

3

Игнорирование вопросов о том, что list1 и list2 (они неактуальны, если score() возвращает одно целое число), я думаю, что проблема кроется в вашей структуре цикла.

Вместо

for i in a: 
    with open("GFOLD_Hisat2.csv", 'wb') as file3: 
     filewriter = csv.writer(file3) 
     filewriter.writerow(score(list1, list2, i)) 

Вы, вероятно, хотите

with open("GFOLD_Hisat2.csv", 'wb') as file3: 
    filewriter = csv.writer(file3) 
    for i in a: 
     filewriter.writerow((score(list1, list2, i),)) 

В настоящее время вы открываете файл и создание нового автора для каждого значения i. Обратите внимание, что я превратил результат score в tuple.

In [8]: a = [1,2,3,4,5] 
In [9]: with open('a.csv', 'wt') as f: 
    wr = csv.writer(f) 
    for i in a: 
     wr.writerow((i,)) 
    ...:   
In [10]: !cat a.csv 
1 
2 
3 
4 
5 

Я также не знаю, почему вы открываете файл с 'wb'

Как Роб указывает, что вы можете просто использовать понимание - полностью избежать петли. Мой ответ сосредоточен на объяснении ошибки в существующем коде.

Кроме того, если ваш выходной файл действительно будет содержать только один столбец, нет причин использовать csv.writer. Просто сделайте следующее

a = [1,2,3,4,5] 
b = [score(list1, list2, i) for i in a] 
with open('a.csv','wt') as f: 
    f.writelines('\n'.join(map(str,b)) 
+0

Это все равно не будет работать: '.writerow()' принимает итерабельность, но 'score()', очевидно, возвращает один 'int'. –

+0

Да, спасибо. Просто поймал, что в интерпретаторе – kdopen

+0

Yup, все еще выводя содержимое списка в столбцы вместо строк. – Labrat

0

Вы должны изменить порядок открытия файла и петли:

a = [numpy.arange(.01,1.01,.01)] 

with open("GFOLD_Hisat2.csv", 'wb') as file3: 
    filewriter = csv.writer(file3) 
    for i in a: 
     filewriter.writerow(score(list1, list2, i)) 
Смежные вопросы