crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
zuze
  опции профиля:
сообщение 20.3.2013, 8:32
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я делаю так:

#Глобальные переменные
NF = None
dir = os.path.join(os.getcwd(), "file") # Выбор текущей директории с файлами

# В функции пишу
global dir
global NF
os.chdir(dir)
fp = open(NF[frame], 'rb')


А в результате выдаётся ошибка: TypeError: 'NoneType' object is unsubscriptable
Может это из-за того, что я сделал глобально NF = None? Я только хотел обнулить глобальный двухмерный массив.

Сообщение отредактировал zuze - 20.3.2013, 15:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.3.2013, 8:40
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(zuze @ 20.3.2013, 9:32) *
Может это из-за того, что я сделал глобально NF = None? Я только хотел обнулить глобальный двухмерный массив.
А для чего ты это делаешь?
Пустой список указывается так:
NF = []          # Создаем пустой список
NF.append(frame) # добавляем в него что нужно
# ...
NF = 'string' # Теперь это строка, а список уничтожится сборщиком мусора
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 8:52
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 20.3.2013, 8:40) *
А для чего ты это делаешь?


Так как я испоьзую NF в нескольких функциях и не заморачиваюсь пока чтобы передавалась в виде параметра, хотя и понимаю что это лучше. Мне пока важна скорость создания, оптимизировать я потом буду.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 9:47
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как я понял это ошибка говорит о том, что массив NF пустой. Но почему ведь я его в начале заполняю?
И если я выведу на экран
print NF[frame]

То прикрасно выводится имя первого файла.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 10:02
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Эта ошибка говорит о том, что объект NF вообще не массив.
Видимо эта функция вызывается раньше, чем заполняется массив.

Чтобы создать пустой массив(список):
Цитата
Пустой список указывается так:
NF = [] # Создаем пустой список
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 10:42
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 10:02) *
Чтобы создать пустой массив(список):

Пустой список указывается так:
NF = [] # Создаем пустой список


Я так сделал, но это не помогло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 11:31
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Приведите код программы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 12:09
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 11:31) *
Приведите код программы.


#Глобальные переменные
NF = []
dir = os.path.join(os.getcwd(), "file") # Выбор текущей директории с файлами

# В функции пишу
global dir
global NF
os.chdir(dir)
fp = open(NF[frame], 'rb')


Но ошибка уже другая: IndexError: list index out of range
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 12:56
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


А где заполнение? И в каком порядке вызываются функции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 13:10
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 12:56) *
А где заполнение? И в каком порядке вызываются функции?


При нажатии на кнопку
def MyNameFile(self):
        NF = os.listdir(dir) # Список файлов и поддиректорий в данной директории
        indexFile = 0

        for name in NF:
            indexFile = indexFile + 1


Вызываю так в конструкторе

self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.MyNameFile)


А открываю файл я в таймере он запускается при нажатии на кнопку. Конечно я нажимаю раньше на кнопку, где заполняется NF именами файлов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 13:15
Сообщение #11


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


В функцию заполнения тоже нужно добавить
global NF
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 13:28
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 13:15) *
В функцию заполнения тоже нужно добавить
global NF


Большое спасибо! Заработало.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 15:38
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я хочу сметить текущую директорию.
Делаю так:
# Глобально делаю
dir = os.path.join(os.getcwd(), "file") # Выбор текущей директории с файлами

# В функции
global dir
os.chdir(dir)


А в результате когда я делаю

print os.chdir(dir)


Выводится: None

Когда я делаю

print dir


Выводится всё правильно: D:\PythonProject\l\file

Пробовал сделать, так

os.chdir(r"D:\PythonProject\l\file")


Тоже выводится: None

Почемуже, так происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.3.2013, 16:06
Сообщение #14


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как я понимаю os.chdir не позвращает ничего, ибо зачем? Ты же и так знаешь на что меняешь, а если что-то будет не так она кинет исключение вроде: WindowsError
Если ты хочешь посмотреть текущую директорию после os.chdir используй os.getcwd.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 16:16
Сообщение #15


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 20.3.2013, 16:06) *
Как я понимаю os.chdir не позвращает ничего, ибо зачем?


Я засомневался из-за того, что следующий код который после откоытия файла написан срабатывает. Что странно, так как и пут текущий должен быть правильный и имя файла верное.

if IOError:
   print "Cannot open file read!"


Может код для проверки открылся ли файл, нужно было другой какой-то писать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.3.2013, 16:33
Сообщение #16


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Конечно он срабатывает, ибо данный код:
if IOError:
   print "Cannot open file read!"
переводится как: если тип IOError не равен None (а он не равен), напечатать "Cannot open file read" :)

ты лучше скажи чего хочешь, а еще лучше почитай книжку по Python не будет лишней... ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 21.3.2013, 9:15
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 20.3.2013, 16:33) *
а еще лучше почитай книжку по Python не будет лишней...


Поправил, тепрерь всё впорядке:

os.chdir(dir)
try:
    fp = open(NF[frame], 'rb')
except IOError:
    print "Cannot open file read!"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 21.3.2013, 14:55
Сообщение #18


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хотел сделать присвоение двухмерному массива двоичного файла по байтно.
Пробовал, как я делал на Си, вот так:

# Глобальная переменная
bf = []

global bf
for j in range(0, 720, 1):
     for i in range(491, 0, -1):
          bf[i][j] = fp.read(1)


Но, выскакивает ошибка: IndexError: list index out of range
Как же это поправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 21.3.2013, 15:20
Сообщение #19


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


for j in range(0, 720, 1):
     bf.append ([]);
     for i in range(491, 0, -1):
          bf[j].append(fp.read(1))


Все же советую использовать что нибудь из следующего:
http://docs.python.org/2/library/array.html - одномерные массивы.
http://www.numpy.org/ - многомерные массивы и полезные функции.
http://www.pythonware.com/products/pil/ - для работы с изображениями.

Кстати, никто не знает альтернативу PIL(что сейчас модно :lol:)? Печалит последний релиз четырехлетней давности.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 21.3.2013, 15:55
Сообщение #20


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 21.3.2013, 15:20) *
for j in range(0, 720, 1):
    bf.append([])
      for i in range(491, 0, -1): 
          bf[j].append(fp.read(1))


Этот строчку кода, когда я делаю во вложенном цикле её

print bf[j]


Выводится почему-то только первое значение, я так понял это из-за того что j не меняеться, но почему оно не меняеться в циклах оно же меняется?

Сообщение отредактировал zuze - 21.3.2013, 15:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 22.3.2013, 8:21
Сообщение #21


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


for j in range(0, 720, 1):
     bf.append([])
     for i in range(491, 0, -1):
         bf[j].append(i+j)
         print bf[j]

Только что из DreamPie, все работает, все выводит :lol:
Кстати рекомендую http://www.dreampie.org/ очень удобно пробовать конструкции которые давно не использовал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 22.3.2013, 8:27
Сообщение #22


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 22.3.2013, 8:21) *
Только что из DreamPie, все работает, все выводит


Всё заработало, только в моём случае в место
bf[j].append(i+j)


делаю
bf[j].append(fp.read(i+j))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.5.2025, 5:23