najas: (Я чайка)
[personal profile] najas
Блин-блин-блин
Не могу разобраться, как сделать экспорт результатов рассчетов в Питоне в текстовый файл.

***

Я хочу, чтобы: 
1) ВСЕ
2) СРАЗУ
3) КРАСИВО

***

Я дослушала двенадцатую лекцию в курсе (всего их 24), и после этого зависла и стала мучительно выбирать - то ли продолжить слушать, то ли начать сначала. Но сейчас пробежалась глазами по аннотациям следующих лекций (а в книгах я последнюю страницу всегда любила больше всех других) и поняла, что надо слушать дальше - безвариантно. Уж больно любопытные вещи там обещают.

Date: 2011-01-31 01:01 pm (UTC)
From: [identity profile] potan.livejournal.com
А какого рода расчеты?
Если численные - то лучше не на питоне, а на R. Там есть готовые модули для любой красивости.
Если символьные (выравнивания и тп), то надо думать...

Date: 2011-01-31 01:27 pm (UTC)
From: [identity profile] najas.livejournal.com
Я знаю, что для численных Р лучше. Там, собственно, рассчет элементарный - просто в один прекрасный день мне было лень искать по лабе калькулятор, я и написала скрипт в Питоне. Нужную функцию в Р не вспомнила. Теперь я его уже вылизала до вполне красивого - но экспортировать не могу - получаю дурацкую ошибку IOError: [Errno 0] Error

Date: 2011-01-31 02:24 pm (UTC)
From: [identity profile] potan.livejournal.com
Странная ошибка.
Может это с операционной системой как-то связано? Скажем пример кода взят для Unix, а запускается под Windows, или наоборот?

Date: 2011-01-31 03:20 pm (UTC)
From: [identity profile] najas.livejournal.com
Переписала для Р :)

Date: 2011-01-31 03:22 pm (UTC)
From: [identity profile] potan.livejournal.com
Эх, а у меня еще столько идей, как искать ошибку было :-)))).

Date: 2011-01-31 03:32 pm (UTC)
From: [identity profile] najas.livejournal.com
Идеи пригодятся! Должна же я разобраться что за фигня :)

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

Date: 2011-01-31 03:04 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
ХЗ, может, поток вывода не открыт? Код в студию
From: [identity profile] najas.livejournal.com
import csv

writer = csv.writer(open("RT.csv"))

gene = raw_input('Which gene do you want to analyze? ')
number_samples = input('How many samples do you have? ')
rna = []
rna_str = []
a1 = 1
#make list of RNA concentrations
for j in range(number_samples):
a1 = float(raw_input('enter RNA conc: '))
rna.append(a1)
rna_str.append(str(a1))
j +=1
rna_conc = min(rna)*11 #rna_conc is amount of RNA that will go into reaction
b = [] #b is volume of RNA that will go into reaction for each sample
b_str = []
for i in range (len(rna)):
b.append(rna_conc/rna[i])
b_str.append(str(round(rna_conc/rna[i], 2))) #convert into string
print gene

print 'RNA concentration, ng/ul', rna_str

print 'RNA volume, ul', b_str

water = [] #amount of water that will go into reaction for each sample
water_str = []
for i in range (len(rna)):
water.append(11-b[i])
water_str.append(str(round((11-b[i]), 2)))

print 'H20, ul', water_str
print rna_conc, 'ng RNA in reaction'

writer.writerow(gene)
writer.writerow('RNA concentration (ng/ul)')
writer.writerow(str(rna))
writer.writerow('RNA volume')
writer.writerow(b_str)
writer.writerow('Water volume')
writer.writerow(water_str)
writer.writerow(str(rna_conc))
writer.writerow('ng RNA in reaction')

Вот на первом же writer.writerow он выпадает в осадок. Файл с нужным названием у него в папке есть (если файла нет, то он сразу жалуется).
From: [identity profile] http://users.livejournal.com/ok_/
Есть подозрение, что надо писать
writer = csv.writer(open("RT.csv", "wb"))

Date: 2011-01-31 03:40 pm (UTC)
From: [identity profile] najas.livejournal.com
!
Жаловаться перестал, но в файл ничего не написал.

*шепотом* а что такое "wb"?

Date: 2011-01-31 03:41 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Попробуй просто "w"? Похоже на флаг write который выставляется при открытии файла. Я питона не знаю, я просто погуглила))

Date: 2011-01-31 03:48 pm (UTC)
From: [identity profile] najas.livejournal.com
не, не пишет...

В мануале на эту тему есть только вот
import csv
writer = csv.writer(open("some.csv", "wb"))
writer.writerows(someiterable)

но я решила, что раз они не объясняют, что такое "wb", то я его писать не буду!

попробую что ли еще погуглить

Date: 2011-01-31 03:52 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
А пример из мануала
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ',
... quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

воспроизводится?

Date: 2011-01-31 04:06 pm (UTC)
From: [identity profile] najas.livejournal.com
не-а.
При этом он не жалуется, что у него файла в директории нет, он его сам туда записывает, но файл пустой.

Date: 2011-01-31 04:13 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
1. Сотри файл из директории и убедись, что питон его там создает
2. Если не создает - вероятно, проблема с правами доступа
3. Если создает - попробуй заменить флаг wb на w

Keep me posted)

Date: 2011-01-31 04:20 pm (UTC)
From: [identity profile] najas.livejournal.com
Создает. И с wb и с w.

НО

Такое впечатление, что он не завершает тот процесс, который у него идет (написания в файл), потому что пока я не перезапущу процесс в питоне, я не могу удалить файл - он используется.

Date: 2011-01-31 04:33 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Питон оказывается позабористей жабы)))

Кажется, вот здесь описан рецепт против твоей беды: http://stackoverflow.com/questions/3896228/python-csv-file-is-empty-after-using-csv-writer

Date: 2011-01-31 04:57 pm (UTC)
From: [identity profile] najas.livejournal.com
Ви таки себе будете смеяться - но оно заработало.

Дело за маленьким - понять, что это было :)))

Date: 2011-01-31 07:03 pm (UTC)
From: [identity profile] cmike.livejournal.com
По моему, просто close не сделан. Нет?

Date: 2011-01-31 08:35 pm (UTC)
From: [identity profile] najas.livejournal.com
Похоже. Я негодую - в мануале про close - ни полслова.

Date: 2011-01-31 09:19 pm (UTC)
From: [identity profile] cmike.livejournal.com
Заглянул в доку. csvWriter пишет в открытый файл (CsvOut) и вот его-то нужно и закрывать.

К свойствам csvWriter-а это отношения не имеет, csvWriter — это просто объект, который осуществляет запись, а с точки зрения csvOut это ничем не отличается от случая, при котором запись делается непосредственно из программы.

Date: 2011-01-31 08:19 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Объект writer не был закрыт))

Date: 2011-01-31 08:34 pm (UTC)
From: [identity profile] najas.livejournal.com
Объект - это csvOut? Ты имей ввиду, что я до понятия объекта в лекциях еще не дошла! (Но идею "если открыли - закройте, если разобрали - соберите, если не разбирали - не вздумайте собирать!" помню прочно :))

В окне – забор, к которому привык.
И вот гляжу с нервической улыбкой,
как пишет непристойность ученик,
причем с орфографической ошибкой.

Понятно все! Встречал я и не раз
на партах мат в одном и том же стиле.
И пусть не врет, что это – первый класс!
Там букву «п» еще не проходили!

Е. Лукин "Педагогическая поэма"

Date: 2011-01-31 08:53 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Объект - это csvOut, да))

Date: 2011-01-31 11:45 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
*ворчливо* Вам таки было угодно выбрать язык объектный, вот и мучайтесь сейчас))

Date: 2011-02-01 07:04 am (UTC)
From: [identity profile] najas.livejournal.com
Цитируя Бориса Годунова: "Это не я! Не я! Нет! Не я! ВОЛЯ НАРОДА!!!"

Date: 2011-01-31 03:34 pm (UTC)
From: [identity profile] najas.livejournal.com
А в Р аналогичный код выглядит так :)))


rna<-read.table("rna.txt", sep="\t", dec=".", h=F)
amount_rna <- (min(rna$V2))*11
volume_rna <- round((amount_rna/(rna$V2)), 2)
volume_water <- 11 - volume_rna
reaction <- data.frame(siRNA = rna$V1, rna_conc=rna$V2, rna_volume = volume_rna, water_volume = volume_water)
write.table(file="RT_reaction.txt", sep="\t", reaction, dec=",")

Profile

najas: (Default)
najas

September 2013

S M T W T F S
1234567
8 91011121314
15161718192021
22232425262728
2930     

Style Credit

Page generated Jan. 15th, 2026 11:41 pm
Powered by Dreamwidth Studios