Форум сайта python.su
0
Здравствуете, подскажите есть ли у функции os.walk() какие либо ограничения по количеству воспринимаемых каталогов и файлов? И можно ли его обойти?
Спрашиваю, потому что делаю программу, которая может создавать копию каталога, а также всех каталогов входящих в копируемый каталог, а также файлов Word и Excel.
Код такой:
import os, shutil q, File_name = os.path.split(os.getcwd()) os.mkdir(q + "\\" + "конечный путь") for folder_name, subfolders, filenames in os.walk(os.getcwd()) : for subfolders_1 in subfolders : subfolders_1 = folder_name + "\\" + subfolders_1 subfolders_1 = subfolders_1.replace(File_name, "конечный путь") os.mkdir(subfolders_1) for filenames_1 in filenames : if filenames_1.endswith(".doc") or filenames_1.endswith(".docx") or filenames_1.endswith(".xlsx")\ or filenames_1.endswith(".xls"): filenames_1 = folder_name + "\\" + filenames_1 filenames_2 = filenames_1.replace(File_name, "конечный путь") shutil.copy(filenames_1, filenames_2)
Отредактировано @Gleb@ (Май 4, 2020 10:39:14)
Офлайн
857
Используй теги кода на форуме, иначе стираются пробелы.
@Gleb@Нет там ограничения. Чтобы в этом убедиться, выведи все полученные пути на экран и прочитай их.
Но, когда я запускаю на больших каталогах, то копируется не все, а только часть, как будто бы в функции os.walk() есть какой-то ограничение.
Офлайн
0
Я так и сделал, еще до того как написал сюда и получил аналогичный результат.
Но, как я понял код перестает работать, когда встречает имя файла длинной более 260 символов. Есть возможность как-то это обойти?
Офлайн
44
.
и вставьте ссылку на его url Офлайн
857
@Gleb@Можешь попробовать включить в реестре Windows
когда встречает имя файла длинной более 260 символов. Есть возможность как-то это обойти?
Офлайн
0
Нашел другое решение проблемы, более универсальное, надеюсь другим новичкам пригодится. Путь надо начинать с \\?\
То есть работающая программа будет выглядеть так :
import os, shutil q, File_name = os.path.split(os.getcwd()) os.mkdir(q + "\\" + "конечный путь") for folder_name, subfolders, filenames in os.walk(os.getcwd()) : for subfolders_1 in subfolders : subfolders_1 = '\\\?\\' + folder_name + "\\" + subfolders_1 # Добавляем \\?\ здесь subfolders_1 = subfolders_1.replace(File_name, "конечный путь") print(subfolders_1) os.mkdir(subfolders_1) for filenames_1 in filenames : if filenames_1.endswith(".doc") or filenames_1.endswith(".docx") or filenames_1.endswith(".xlsx")\ or filenames_1.endswith(".xls"): filenames_1 = '\\\?\\' + folder_name + "\\" + filenames_1 # Добавляем \\?\ здесь filenames_2 = filenames_1.replace(File_name, "конечный путь") shutil.copy(filenames_1, filenames_2) print(filenames_1)
Офлайн
0
Всем привет я тут в первые не мгли бы вы мне помоч так как я начинаю толко не могу понять что в этом коде не так
from math import*
x = input('Диаметр арматуры?''\n')
if x == 16 == 18 == 20 == 22 == 25:
z = float(input('Какая длинa?' ‘\n’))
c = fkoat(input('Какая цена за метр?' ‘\n’))
print(z*c)
elif x == 28 == 30 == 32 == 36:
q = int(input('Какая длинa?' ‘\n’))
w = int(input('Сколько прутков?' ‘\n’))
он не выводит строки которые в иф и элиф без разницы ккие я ввел данные в х
Офлайн
186
> x == 16 == 18 == 20 == 22 == 25
x in (16, 18, 20, 22, 25)
Офлайн
0
Rodegast
Всепавно не выводит то что в иф и элиф
Офлайн
44
Panaetпердположу что это просходит от того что вы не делаете преобразование типов после x = input('Диаметр арматуры?''\n') и в результате сравниваете тёплое с мягким (str c int)
Всепавно не выводит то что в иф и элиф
и вставьте ссылку на его url Офлайн