Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 15, 2015 21:00:08

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись данных в переменную

оброго времени суток! такая ситуация - хочу записать информацию в переменную а затем сохранить в файл. есть код -

import wmi
c = wmi.WMI ()
DRIVE_TYPES = {
  0 : "Unknown",
  1 : "No Root Directory",
  2 : "Removable Disk",
  3 : "Local Disk",
  4 : "Network Drive",
  5 : "Compact Disc",
  6 : "RAM Disk"
}
for drive in c.Win32_LogicalDisk ():
  print drive.Caption, DRIVE_TYPES[drive.DriveType]
при запуске печатает
C: Local Disk
D: Local Disk
E: Compact Disc
F: Compact Disc
G: Compact Disc   
все нормально, но когда я записываю информацию в переменную и потом пытаюсь вывести на экран информацию из переменной то получается такая вот штука
(u'G:', 'Compact Disc')
и все … не пойму в чем дело .
C: Local Disk
D: Local Disk
E: Compact Disc
F: Compact Disc
G: Compact Disc
это же не список, не словарь , не строка … это вроде если я не ошибаюсь кортеж но почему он в переменную не записывается ?заранее спасибо!

Офлайн

#2 Дек. 15, 2015 23:38:11

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Запись данных в переменную

Может как то так попробовать? В файл соответственно так же записывать.

for drive in c.Win32_LogicalDisk ():
  print "{0}: {1}".format(drive.Caption, DRIVE_TYPES[drive.DriveType])

Отредактировано Firik (Дек. 15, 2015 23:38:53)

Офлайн

#3 Дек. 16, 2015 17:30:51

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись данных в переменную

Firik Спасибо но тут другая незадача появилась - (фото ) что не так не могу врубиться…

Прикреплённый файлы:
attachment Безымянный.png (290,4 KБ)

Офлайн

#4 Дек. 16, 2015 18:53:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Запись данных в переменную

“w” - это режим для записи, он стирает файл. Вам нужен режим добавления “а”.
И вообще, вы зря открываете и закрываете файл в цикле. Вынесите опен и клозе за пределы цикла, пусть он один раз откроется.



Отредактировано FishHook (Дек. 16, 2015 18:54:20)

Офлайн

#5 Дек. 16, 2015 19:26:12

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись данных в переменную

FishHook
не помогает….. записывает только последнюю строку—- G: Compact Disc и все . может можно как-то кортеж преобразовать в строку или список или хоть во что нить ….

Офлайн

#6 Дек. 16, 2015 22:32:31

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Запись данных в переменную

Igorsk
последний вариант кода в студию

Офлайн

#7 Дек. 16, 2015 22:33:58

dzh
Зарегистрирован: 2015-12-01
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись данных в переменную

Нет у вас кортежа. value и есть строка.

value = '{} {}'.format(a, b)

FishHook вам указал на проблему
f = open('file name.txt', 'w')
for i in blabla:
    pass
f.close()

Офлайн

#8 Дек. 16, 2015 23:45:15

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись данных в переменную

dzh
Нет у вас кортежа.
это уже после так скажем форматирования -
'{} {}'.format
если прописать
print drive.Caption, DRIVE_TYPES[drive.DriveType]
то выводит кортеж
C: Local Disk
D: Local Disk
E: Compact Disc
F: Compact Disc
G: Compact Disc  

Firik
последний вариант кода в студию

import wmi
c = wmi.WMI ()
DRIVE_TYPES = {
  0 : "Unknown",
  1 : "No Root Directory",
  2 : "Removable Disk",
  3 : "Local Disk",
  4 : "Network Drive",
  5 : "Compact Disc",
  6 : "RAM Disk"
}
for drive in c.Win32_LogicalDisk ():
  value = u'{} {}'.format(drive.Caption, DRIVE_TYPES[drive.DriveType])
f = open('file name.txt', 'w')
for i in value:
  f.write(i)
  pass
f.close()

и все равно записывает только одну последнюю строку
G: Compact Disc
нихрена не понимаю …. где я туплю …

Офлайн

#9 Дек. 17, 2015 02:02:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Запись данных в переменную

внимаааааательно смотрите что вы записываете в переменную value - вы в цикле каждый раз обновляете значение, присваивая ей новую строку. Т.е. по выходу из цикла в переменной value хранится последнее значение полученное из c.Win32_LogicalDisk(). Во втором цикле вы проходитесь по строке(!) т.е. по каждому символу строки записывая его в файл.

Программа делает ровно то, что от нее Вы попросили.

Другое дело что вы сами хотите не этого. Вы наверняка хотите иметь переменную в которой бы присутствовали все значения из функции c.Win32_LogicalDisk(). Значения которой в последствие записать в файл.Вот:

import wmi
c = wmi.WMI ()
DRIVE_TYPES = {
  0 : "Unknown",
  1 : "No Root Directory",
  2 : "Removable Disk",
  3 : "Local Disk",
  4 : "Network Drive",
  5 : "Compact Disc",
  6 : "RAM Disk"
}
values = []
for drive in c.Win32_LogicalDisk():
  values.append(u'{} {}'.format(drive.Caption, DRIVE_TYPES[drive.DriveType]))
f = open('file name.txt', 'w')
for value in values:
  f.write(value + '\n')
f.close()

Ну а более python-way как то так:
import wmi
c = wmi.WMI ()
DRIVE_TYPES = {
  0 : "Unknown",
  1 : "No Root Directory",
  2 : "Removable Disk",
  3 : "Local Disk",
  4 : "Network Drive",
  5 : "Compact Disc",
  6 : "RAM Disk"
}
values = [u'{} {}'.format(drive.Caption, DRIVE_TYPES[drive.DriveType]) for drive in c.Win32_LogicalDisk()]
with open('file name.txt', 'w') as f:
    f.write('\n'.join(values))




_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#10 Дек. 17, 2015 12:47:31

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись данных в переменную

JOHN_16
Программа делает ровно то, что от нее Вы попросили.
Ды я это понимаю ! я жалуюсь на свой недостаток знаний в программировании … не могу правильно объяснить программе что делать… спасибо большое !

Отредактировано Igorsk (Дек. 17, 2015 12:48:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version