Найти - Пользователи
Полная версия: Копирование большого (больших) файлов в python
Начало » Python для новичков » Копирование большого (больших) файлов в python
1 2
childeroland
Здравствуйте все!!! Интересует вопрос: пишу простенький пока скрипт, который копирует определённые файлы .dbf, запускает индексацию (внешним приложением, собственно, не важно), а затем запускает ещё одно приложенице для обработки этих .dbf'ок… На данном этапе у меня всё работает, однако возник вопрос, который не даёт мне покоя уже несколько дней, но на который я не смог найти вразумительного ответа, а именно: искомые файлы копируются с некого сетевого ресурса в локальной сети, объём их различен, в среднем по 2Гб, на копирование одного только файла у меня уходит около часа. Использую функцию shutil.copy… Есть ли способы увеличить скорость копирования файлов?
Shaman
Лучше обрабатывать их на родной стороне.
JOHN_16
childeroland
для начала, “по сети” означает Windows сеть и сетевые диски?
И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл. На счет скорости не знаю. Проверьте сами и отпишитесь
childeroland
Shaman
Лучше обрабатывать их на родной стороне.
На родной стороне нельзя по двум причинам: это система с DOS и Novell NetWare, как туда прикрутить python я даже не знаю (хотелось бы обойтись без упаковки в .exe); во всей этой хрупкой цепочке последняя запускаемая программа формирует ещё одни базы на основе существующих, при этом блокирует доступ к исходным файлам, поэтому обработка запускается на копии
childeroland
JOHN_16
childerolandдля начала, “по сети” означает Windows сеть и сетевые диски?И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл. На счет скорости не знаю. Проверьте сами и отпишитесь
По сети означает (как в предыдущем посте) ОС DOS c NovellNetWare - там хранятся исходные файлы, и есть сторонний сервер под Windows 2003 Server с клиентом под NetWare. Логинимся в NetWare, получаем доступ к сетевым дискам, оттуда копируем базы…
Наверно всяких уточняющих вопросов будет много, я наверняка чего-то упустил в описании. Заранее скажу, использую python 3.3.2
Про открывать, читать и переписывать, конечно, попробую, но я не вижу пока логики, вряд ли такая схема будет быстрее… разве что можно дописывать в результирующие файлы только разницу…
childeroland
JOHN_16
И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл
Опять таки, писал выше, что файл может быть блокирован другим приложением, т.е., не факт, что я смогу получить доступ к файлу в какой-то момент времени, и не факт, что моё соединение с этим файлом не сможет быть прервано (прецеденты уже были).

Что больше всего огорчает, так это то, что винда тот же файл с того же источника копирует в разы быстрее
Lexander
Может быть, дело в размере буфера.
Тогда посмотрите http://blogs.blumetech.com/blumetechs-tech-blog/2011/05/faster-python-file-copy.html

Антивирусы, загруженность сети и т.п. общесистемные вещи исключили из списка “подозреваемых”?
doza_and
childeroland
винда тот же файл с того же источника копирует в разы быстрее
ну вам доступны любые команды windows
subprocess.call("copy a.dat b.dat",shell=1)

можно использовать:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363852(v=vs.85).aspx
которую можно вызвать с использованием ctypes.
Более точно можно регулировать доступ к файлу при помощи:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
но тогда надо самому писать файл. Представляет интерес FILE_FLAG_SEQUENTIAL_SCAN
На той стороне DOS…. вспомнить бы те времена. А как интересно там такие файлы здоровые помещаются?

py.user.next
childeroland
Использую функцию shutil.copy… Есть ли способы увеличить скорость копирования файлов?
копируй внешними средствами, поддерживающими докачку
childeroland
doza_and
На той стороне DOS…. вспомнить бы те времена. А как интересно там такие файлы здоровые помещаются?
Ну, на сколько я знаю, FAT32 позволяет размещать файлы размером до 4ГБ… На счёт команд Windows… Суть в том, что сам скрипт у меня работает и сделать я его как раз хотел на python в рамках изучения языка… А команды Winodws я мог и в батнике использовать… По правде говоря, перед тем как я решил выпендриться и написать программу на совершенно неизвестном мне языке, я как раз делал командный файл, разницы, если честно, по скорости, не заметил… А вот то же копирование, скажем, в FAR'е выполняется быстрее… Не фонтан, но быстрее.
А за совет спасибо, я гляну…
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