2013-03-30 2 views
0

Я создаю программу, которая, помимо прочего, создаст новые объекты с переменной экземпляра под названием «имя». Если «имя» не передается в метод, тогда мой код читается из файла, который содержит набор мужских и женских имен и выбирает один. Мой файл называется names.txt и устанавливается следующим образом:Легче ли сделать 1 файл с большим количеством данных или 4 файлами, каждый с 1 набором данных?

1. John, Alex, Adam, Matt, Sean, Max, . . . 
2. John, Adam, Matt, Sean 
3. Sarah, Mary, Alexa, Amy, Katie, . . . 
4. Mary, Amy, Katie 

Файл организован таким образом, что линии 1 и 3 приведен список всех возможных имен для человека того пола, а линии 2 и 4 списка имена для этого пола, которые еще не используются. Как видно, строки 1-2 - это имена для парней, а строки 3-4 - для девочек. Способ, которым я планирую использовать этот файл, - выбрать из строк 2 или 4 доступное имя (операция «читать»), а затем переписать строку без этого имени (операция «запись»)

Теперь, когда я объяснил это, вот мой вопрос: с тем, как python может выполнять операции с файлами, мне лучше иметь несколько файлов, каждый из которых имеет либо 2 из вышеуказанных строк, либо всего 1, или лучше иметь один большой файл? Исследование, которое я сделал, указывает на то, что для удаления/перезаписи даже одного имени мне нужно будет прочитать каждую строку в файле, сделать ее копию в памяти и затем полностью повторно ввести все данные после извлечения одного имени. Хотя я не планирую иметь много строк текста, я вижу, что, возможно, сотни имен на каждой из этих четырех строк. Необходимо создать пространство для всех этих данных в памяти, чтобы я мог удалить одно имя из файла, кажется крайне неэффективным. Другая вещь, которую я решил сделать, это разделить данные на 2 или 4 файла. В случае с 2-мя файлами у меня бы были строки 1-2 в файле 1 и строки 3-4 в файле 2, и приходится иметь дело с той же проблемой, о которой я упоминал в предыдущем абзаце, за исключением меньшего масштаба (I ' d иметь меньше данных, чтобы беспокоиться о сохранении памяти). В случае с четырьмя файлами почти нет проблем с хранением данных, но теперь мне придется беспокоиться о сохранении и отслеживании 4 файлов. При этом я чувствую, что лучше буду управлять своими ресурсами, но я потеряю определенную степень организации, которую я почувствовал, имея все 4 строки в 1 файле.

Итак, я спрашиваю: лучше ли иметь один большой файл для выполнения операций чтения/записи, или лучше иметь несколько файлов, каждый из которых содержит один или два сегмента общих данных, для выполнения операций?

Благодарим за ответ!

-Макс, начинающий программист питона

пс. Это мой первый пост, и я не уверен, предоставил ли я слишком много информации или недостаточно, пожалуйста, сообщите об этом, если сможете!

ответ

0

Я бы не стал слишком беспокоиться о неэффективности одного большого файла.

При условии, что средняя длина имени 10 символов и 10.000 имен будет по-прежнему на 100Kb, что значительно ниже текущего уровня памяти на компьютере.

На самом деле вам не нужно полностью выписывать файл, так как вы можете писать в новый файл во время чтения имени одновременно, после того как вы закончите, удалите оригинал и переименуйте новый файл в оригинал , Это по существу то, как старые компьютеры делали это с небольшими операциями с памятью и лентой (запись на новую ленту при сортировке и т. Д.).

Если вы просто хотите больше эффективности, без накладных расходов с использованием базы данных, вы можете рассмотреть следующие вопросы:

  • Не используйте текстовые файлы, но сохранить имена в качестве словаря в качестве списка питона в маринованная форма.Это должно означать чтение и сброс данных. Но проверить полученный файл не так-то просто.
  • Если вы хотите придерживаться читаемого текста, считайте, что между именами нет ,, но либо , (запятая + пробел) после каждого имени, либо . (точка + пробел) после каждого имени в зависимости от используемого имени или нет , Если вы откроете файл с "w+" и просто перепишите запятую после имени в период, когда вы используете имя. Это намного эффективнее, чем переписывание файлов, и ваш файл будет более эффективным, потому что вы не удваиваете неиспользуемые имена.