Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2010 17:29:08

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

КОД

Подскажите,как мне упростить этот код? Тоесть мне надо найти имеющиеся символы на диске D и допустим вывести их!
Так-как я ещё не со многими методами,функциями знаком,подсказка не помешала бы!

import os
l=[213, 206, 210, 197, 203, 206, 209, 220, 45, 193, 219, 32, 196, 206, 211, 215,
200, 210, 220, 32, 207, 200, 210, 206, 205, 44, 207, 206, 202, 192, 32, 207,
206, 223, 194, 200, 203, 206, 209, 220, 32, 206, 195, 208, 206, 204, 205, 206,
197, 32, 198, 197, 203, 192, 205, 200, 197, 33, 32, 207, 206, 205, 200, 204,
192, 222, 32, 215, 210, 206, 32, 204, 205, 206, 195, 206, 197, 32, 199, 192,
194, 200, 209, 200, 210, 32, 206, 210, 32, 209, 192, 204, 206, 209, 210, 206,
223, 210, 197, 203, 220, 205, 206, 201, 32, 208, 192, 193, 206, 210, 219, 44,
205, 206, 32, 209, 206, 194, 197, 210, 32, 193, 219, 32, 205, 197, 32, 207,
206, 204, 197, 216, 192, 203, 33]
n=0;s=''
for x,y,z in os.walk('d:\\'):
for w in z:
if chr(l[n]) in w or chr(l[n]) in s1:
print chr(l[n]),
n+=1
if n>=len(l):break
else:
s1+=chr(l[n])



Офлайн

#2 Март 27, 2010 17:46:26

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

КОД

И почему-то на компе этот код немного работает,а на смарте нет! Хотя на смартф. есть эти символы!
Но не в смарф. дело! Как мне написать попроще код?



Офлайн

#3 Март 27, 2010 18:44:02

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

КОД

кортеж может быть большим , тебе тогда проще перебор из файла пробовать делать… точно утверждать не могу нет подходящего устроиства под рукой

Офлайн

#4 Март 27, 2010 19:11:02

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

КОД

найти имеющиеся символы на диске можно например так:

# coding: utf-8
import os
l = [49,50]

l = map(lambda x:chr(x),set(l))
s = set(''.join([''.join(z) for x,y,z in os.walk('.')]))
print ','.join(x for x in s if x in l)

Офлайн

#5 Март 27, 2010 19:13:18

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

КОД

нужно только в walk диск выбрать,
и раз надо искать символы то символы в массиве и хранить вместо чисел

Офлайн

#6 Март 27, 2010 22:11:10

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

КОД

Интерестно!
map,lambda я уже успел освоить слава богу!.Но пока я учу про set в нете,немного семантики можно?для лучшего понимания про set(пару слов!)

l=lambda x:'-'.join(x)
s='set'
l(s)
a=map(l,s.upper())



Офлайн

#7 Март 27, 2010 22:28:57

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

КОД

python4ik
Подскажите,как мне упростить этот код?
Для начала нужно его исправить, а потом уже упрощать.
Я вижу как минимум 2 ошибки - использование несуществующей переменной s1 и выход за границы списка l при количестве файлов в каталоге большем, чем длина l.
Кроме того код вообще не делает того, что вы хотите.



Офлайн

#8 Март 27, 2010 22:42:08

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

КОД

Согласен на счёт s1. То я у себя при тестировании использовал ещё одну переменную s1 кроме s.
Тоесть на эту ошибку можно не обращать внимание.У меня в коде стояла s вместо s1.
А вот на счёт

выход за границы списка l при количестве файлов в каталоге большем, чем длина
можно по подробней?
Меня ведь и интересует,как довести код до ума.



Офлайн

#9 Март 27, 2010 23:45:35

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

КОД

python4ik
можно по подробней?
Можно и поподробнее.
представьте себе каталог с количеством файлов большим, чем длина l.
Смотрим на ваш код. В цикле for w in z: вы перебираете файлы, так? В том же цикле у вас увеличивается n на единицу и используется как индекс в l. таким образом если количество файлов в каталоге больше, чем длина l, то на некотором файле n станет тоже больше и вуаля - l приведет к “IndexError: list index out of range”.

Меня ведь и интересует,как довести код до ума.
Тогда подумайте о том, используете ли вы один символ из вашего списка для поиска в именах файлов или все.



Офлайн

#10 Март 28, 2010 12:42:35

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

КОД

В том же цикле у вас увеличивается n на единицу и используется как индекс в l.
А ведь n стоит не в цикле for w in z,а увеличивается при условии,что символ из моего списка совпадает с одним из символов в файле!
По моему n увеличивается только при совпадении символов,а не при перебирании файлов!Если я ошибаюсь,просветите меня,какую я мелочь языка в Питоне недопонял.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version