Я читаю построчно из текстового файла и манипулирую строкой, чтобы затем записать ее в CSV-файл.
Я могу придумать два лучших способа сделать это (и я приветствую другие идеи или модификации):
- Чтение, обработка одной строки в списке и go прямо на запись строки.
linelist = []
with open('dirty.txt', 'r') as dirty_text:
with open('clean.csv', 'w') as clean_csv:
cleancsv_writer = csv.writer(clean_csv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for line in dirty_text:
#Parse fields into list, replacing the previous list item with a new string that is a comma-separated row.
#Write list item into clean.csv.
Считать и обработать строки в список (до достижения предела размера списка), затем записать список в CSV в один большой пакет. Повторяйте до конца файла (но я опускаю l oop для этого примера).
linelist = []
seekpos = 0
with open('dirty.txt', 'r') as dirty_text:
for line in dirty_text:
#Parse fields into list until the end of the file or the end of the list's memory space, such that each list item is a string that is a comma-separated row.
#update seek position to come back to after this batch, if looping through multiple batches
with open('clean.csv', 'a') as clean_csv:
cleancsv_writer = csv.writer(clean_csv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
#write list into clean.csv, each list item becoming a comma-separated row.
#This would likely be a loop for bigger files, but for my project and for simplicity, it's not necessary.
Какой процесс наиболее эффективно использует ресурсы?
В этом случае я предполагаю, что никому (человеку или кому-либо еще) не нужен доступ к какому-либо файлу во время этого процесса (хотя я бы с удовольствием услышал обсуждение эффективности в этом случае).
Я также предполагаю, что список требует меньше ресурсов, чем в словаре.
Моя основная задача - использование памяти. Я догадываюсь, что первый процесс использует наименьшее количество памяти, потому что список никогда не становится длиннее, чем один элемент, поэтому максимальная память, которую он использует в любой данный момент, меньше, чем у второго процесса, который максимально использует память списка. Но я не уверен, как динамическое распределение памяти c работает в Python, и у вас есть два файловых объекта, открытых одновременно в первом процессе.
Что касается энергопотребления и общего времени занимает, я не уверен, какой процесс является более эффективным. Я догадываюсь, что с несколькими пакетами второй вариант потребляет больше энергии и занимает больше времени, потому что он открывает и закрывает файлы в каждом пакете.
Что касается сложности и длины кода, то первый вариант выглядит так, как будто он будет получается проще и короче.
Другие соображения?
Какой процесс лучше?
Есть ли лучший способ? Десять лучших способов?
Заранее спасибо!