В этой ситуации я бы выбрал python, чтобы избежать оптимизма, предполагая пути без пробелов или косых черт. Я также обнаружил, что python2
имеет тенденцию устанавливаться в большем количестве мест, чем rename
.
#!/usr/bin/env python2
import sys, os
def rename_dir(directory):
print('DEBUG: rename('+directory+')')
# rename current directory if needed
os.rename(directory, directory.lower())
directory = directory.lower()
# rename children
for fn in os.listdir(directory):
path = os.path.join(directory, fn)
os.rename(path, path.lower())
path = path.lower()
# rename children within, if this child is a directory
if os.path.isdir(path):
rename_dir(path)
# run program, using the first argument passed to this python script as the name of the folder
rename_dir(sys.argv[1])
>>> class Test:
... def __repr__(self):
... return "Test()"
... def __str__(self):
... return "member of Test"
...
>>> t = Test()
>>> t
Test()
>>> print(t)
member of Test
Метод __ str __
- это то, что происходит при его печати, а метод __ repr __
- это то, что происходит при использовании repr ()
(или когда вы смотрите на нее в интерактивной подсказке). Если это не самый Pythonic метод, прошу прощения, потому что я тоже все еще учусь, но он работает.
Если не указан метод __ str __
, Python будет печатать вместо этого результат __ repr __
. Если вы определите __ str __
, но не __ repr __
, Python будет использовать то, что вы видите выше, как __ repr __
, но по-прежнему будет использовать __ str __
для печати.
Как упомянул Крис Лутц , это определяется методом __ repr __
в вашем классе.
Из документации repr ()
]:
Для многих типов эта функция пытается вернуть строку, которая даст объект с тем же значением при передаче в
eval ()
, в противном случае представление представляет собой строку, заключенную в угловые скобки. который содержит имя типа объекта вместе с дополнительной информацией, часто включающей имя и адрес объекта. Класс может контролировать, что эта функция возвращает для своих экземпляров, определяя метод__ repr __ ()
.
Для следующего класса Test:
class Test:
def __init__(self, a, b):
self.a = a
self.b = b
def __repr__(self):
return "<Test a:%s b:%s>" % (self.a, self.b)
def __str__(self):
return "From str method of Test: a is %s, b is %s" % (self.a, self.b)
.. он будет действовать в оболочке Python следующим образом:
>>> t = Test(123, 456)
>>> t
<Test a:123 b:456>
>>> print repr(t)
<Test a:123 b:456>
>>> print(t)
From str method of Test: a is 123, b is 456
>>> print(str(t))
From str method of Test: a is 123, b is 456
Если не определен метод __ str __
, print (t)
(или print (str (t))
) будет использовать результат __ repr __
вместо
Если нет __ repr __
, то используется метод по умолчанию, который в значительной степени эквивалентен ..
def __repr__(self):
return "<%s instance at %s>" % (self.__class__.__name__, id(self))