Есть ли более быстрый способ удалить первые x строк из DBF?

Я пытался использовать CDBFLite для удаления записей файла DBF из записей от 1 до 5 миллионов или около того (чтобы уменьшить размер файла). Из-за не зависящих от меня факторов, это то, что мне придется делать каждый день. Размер файла превышает 2 ГБ.

Однако для удаления команд требуется вечность. Есть ли более быстрый способ просто удалить первые X записей DBF (и, следовательно, уменьшить размер файла)?

2 ответа

Вот очень грубый план, используя мой пакет dbf:

import dbf
import shutil

database = r'\some\path\to\database.dbf'
backup = r'\some\backup\path\database.backup.dbf')

# make backup copy
shutil.copy(database, backup)

# open copy
backup = dbf.Table(backup)

# overwrite original
database = backup.new(database)

# copy over the last xxx records
with dbf.Tables(backup, database):
    for record in backup[-10000:]:
        database.append(record)

Я подозреваю, что копирование поверх последней, однако, много записей, которые вы хотите, будет быстрее, чем упаковка.

Как отметил Итан, если файл.DBF, то он обычно ограничен стандартной 32-битной ОС емкостью 2 гигабайта на один файл, когда речь идет о.DBF, если вы не имеете дело с другим программным механизмом, таким как SyBase Database Advantage, который может читать / записывать в файлы.DBF и превышать емкость 2 ГБ.

Тем не менее, стандартный формат DBF имеет один символ на каждой записи в качестве "флага", что запись удаляется, но все еще сохраняет место. Чтобы уменьшить размер, вам нужно упаковать файл, который фактически удаляет удаленные записи и, таким образом, уменьшит размер файла обратно.

Теперь у Итана есть опции через Python, а я через C#.net и использую Microsoft Visual Foxpro OleDb Provider и могу предложить больше, но не знаю, к чему у вас есть доступ.

Если у вас есть VFP (или dBASE) напрямую, то это должно быть так же просто, как добраться до командного окна и сделать

USE [YourTable] exclusive
pack

Но я бы сначала сделал резервную копию файла в качестве простой меры предосторожности.

Другие вопросы по тегам