Форум сайта python.su
Всем привет..
Такой вопрос. Чтобы обозначить тот или иной текст в юникоде - надо поставить ‘u’ перед ковычками (u'Нужный текст')…
А вот допустим есть переменная (abc = listdir('c:\\')), можно ли как-то прописать допустим print abc, но при этом в юникоде? print u'abc', print u(abc) само-собой не удалось… Что делать в этом случае?
Офлайн
не совсем понятно, что Вам нужно, функция listdir() вернет список :(
Офлайн
>>> unicode('abc')
u'abc'
Офлайн
boltayka, читаем о методах encode / decode
Офлайн
boltayka
Может ты вот это имел в виду?:
>>> import os
>>> os.listdir('.')
['.appcfg_cookies', '.appcfg_nag', '.datacleaner', '.datastudio', '.epictetus',
'.esd_auth', '.ExcelsiorJET', '.gnome2', '.idlerc', '.jline-jython.history', ...]
>>> os.listdir(u'.')
[u'.appcfg_cookies', u'.appcfg_nag', u'.datacleaner', u'.datastudio', u'.epictet
us', u'.esd_auth', u'.ExcelsiorJET', u'.gnome2', u'.idlerc', u'.jline-jython.his
tory', ...]
Офлайн
dvs, И это тоже нужно. В данный момент проблемы с кодировкой в командной строке, и конкретно с функцией listdir…
Через IDLE работает отлично, хотя при этом если прописать просто os.listdir('c:\\'), то выдаёт “xe7\xe5\xec”.. Но при выводе цикла все по-русски…
Через командную строку os.listdir, цикл и raw_input кодировку путают… :(
Пробовал encode, decode, но что-то не очень в них вдуплил… Если кому не лень, покажите на примере моего кода, сортирующего файлы по папкам…
import shutil
import os
q = raw_input('''Path:
''')
maxx = input('''How many files in 1 folder?
''')
print 'Wait, please'
maxxx = maxx
minn = 0
fq = os.listdir(q)
folder = 0
os.mkdir(q+"\\"+str(folder))
for files in fq:
put = q+"\\"+files
put2 = q+"\\"+str(folder)+'\\'+files
shutil.move(put, put2)
if fq.index(files)+1 == maxx:
maxx += maxxx
minn += maxxx
folder += 1
os.mkdir(q+"\\"+str(folder))
print 'Done.'
Отредактировано (Фев. 25, 2010 17:47:30)
Офлайн
я бы сделал вот что то типа такого:
import os
folder = raw_input('folder:')
col = raw_input('col:')
for i,f in enumerate([s for s in os.listdir(folder) if os.path.isfile(folder+'/'+s)]):
f2 = '%s/%d' % (folder,i//col)
os.mkdir(f2)
os.rename(folder+'/'+f,f2+'/'+f)
Отредактировано (Фев. 25, 2010 18:31:31)
Офлайн
в качестве палок (сепаратора) лучше использовать os.sep, что-б мульти платформенно было…
и ещё надо сделать что-б mkdir на каждой итерации не вызывалось, например можно добавить условие if not os.path.isdir
Отредактировано (Фев. 25, 2010 18:38:10)
Офлайн
boltaykaВы бы вывод показали или ошибку, если таковая имеется
Через командную строку os.listdir, цикл и raw_input кодировку путают… sad
Пробовал encode, decode, но что-то не очень в них вдуплил… Если кому не лень, покажите на примере моего кода, сортирующего файлы по папкам…
o7412369815963собирать путь к файлу целесообразнее функцией os.path.join
в качестве палок (сепаратора) лучше использовать os.sep, что-б мульти платформенно было…
import os
def main():
folder = raw_input('folder:')
col = int(raw_input('col:'))
if not isinstance(folder, unicode):
folder = folder.decode("cp866") # кодировка по умолчанию консоли MS Windows
for i, f in enumerate(s for s in os.listdir(folder) \
if os.path.isfile(os.path.join(folder, s))):
f2 = os.path.join(folder, "%d" % (i // col))
if not os.path.exists(f2): os.mkdir(f2)
os.rename(os.path.join(folder, f), os.path.join(f2, f))
import os, shutil
def main():
folder = raw_input('folder:')
col = int(raw_input('col:'))
if not isinstance(folder, unicode):
folder = folder.decode("cp866") # кодировка по умолчанию консоли MS Windows
for i, f in enumerate(s for s in os.listdir(folder)):
f2 = os.path.join(folder, "%d" % (i // col))
if not os.path.exists(f2): os.mkdir(f2)
shutil.move(os.path.join(folder, f), os.path.join(f2, f))
Отредактировано (Фев. 26, 2010 03:18:13)
Офлайн