Найти - Пользователи
Полная версия: unicode для переменной...
Начало » Python для новичков » unicode для переменной...
1
boltayka
Всем привет..
Такой вопрос. Чтобы обозначить тот или иной текст в юникоде - надо поставить ‘u’ перед ковычками (u'Нужный текст')…
А вот допустим есть переменная (abc = listdir('c:\\')), можно ли как-то прописать допустим print abc, но при этом в юникоде? print u'abc', print u(abc) само-собой не удалось… Что делать в этом случае?
pyuser
не совсем понятно, что Вам нужно, функция listdir() вернет список :(
bazooka
>>> unicode('abc')
u'abc'
cutwater
boltayka, читаем о методах encode / decode
dvs
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', ...]
boltayka
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.'
p.s. Не советую гонять через него нужные папки =))))
o7412369815963
я бы сделал вот что то типа такого:
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)
os.path.isfile - для проверки существования файла, вдруг папка попадется или ещё что…
o7412369815963
в качестве палок (сепаратора) лучше использовать os.sep, что-б мульти платформенно было…
и ещё надо сделать что-б mkdir на каждой итерации не вызывалось, например можно добавить условие if not os.path.isdir
pyuser
boltayka
Через командную строку os.listdir, цикл и raw_input кодировку путают… sad
Пробовал encode, decode, но что-то не очень в них вдуплил… Если кому не лень, покажите на примере моего кода, сортирующего файлы по папкам…
Вы бы вывод показали или ошибку, если таковая имеется
Если я все правильно понимаю, то проблемы возникают при вводе папки, в имени которой есть русские буквы?
o7412369815963
в качестве палок (сепаратора) лучше использовать os.sep, что-б мульти платформенно было…
собирать путь к файлу целесообразнее функцией os.path.join

вот, слегка поправленный код o7412369815963, который точно будет работать в консоли windows, но скорее всего не заработает в IDLE ():
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))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB