Из http://www.cplusplus.com/reference/string/string/find_last_of/ :
// string::find_last_of
#include
#include
using namespace std;
void SplitFilename (const string& str)
{
size_t found;
cout << "Splitting: " << str << endl;
found=str.find_last_of("/\\");
cout << " folder: " << str.substr(0,found) << endl;
cout << " file: " << str.substr(found+1) << endl;
}
int main ()
{
string str1 ("/usr/bin/man");
string str2 ("c:\\windows\\winhelp.exe");
SplitFilename (str1);
SplitFilename (str2);
return 0;
Это должно дать вам представление о том, как справиться с строкой пути. Затем после этого все, что вам нужно сделать, - это цикл через пути, начиная с диска и заканчивая самой глубокой папкой. Проверьте, существует ли папка, а если нет, создайте ее.
Вы могли бы использовать другую f-строку для вашего первого условия:
f"Percent profit : {f'{self.percent_profit:.2f}' if True else 'None yet'}"
По общему признанию, не идеал, но он выполняет свою работу.
Я думаю, что f-строка в ответе f-строки настолько проста, насколько это возможно, но если вы хотите немного большей читабельности, рассмотрите возможность перемещения условия за пределы f-строки:
value = f'{self.percent_profit:.2f}' if True else 'No data yet'
print(f"Percent profit : {value}")
Вы также можете использовать троичную для форматера - нет необходимости складывать 2 f-строки, как Николас ответ делает:
for pg in (2.562345678, 0.9, None): # 0.0 is also Falsy - careful ;o)
print(f"Percent Growth: {pg if pg else 'No data yet':{'.05f' if pg else ''}}")
# you need to put '.05f' into a string for this to work and not complain
Выход:
Percent growth: 2.56235
Percent growth: 0.90000
Percent growth: No data yet