Создать список номеров
Привет, я хочу создать список чисел от 1000000 до 2000000, но проблема в том, что я получаю ошибку памяти ошибки, я использовал случайные, все было хорошо, только я получаю дублированное число, и я не могу иметь дублированное число, поэтому я переключился на xrange
data = []
total = 2000000
def resource_file(info):
with open(info, "r") as data_file:
reader = csv_reader(data_file, delimiter=",")
for row in reader:
try:
for i in xrange(1000000,total):
new_row = [row[0], row[1], i]
data.append(new_row)
except IndexError as error:
print(error)
with open(work_dir + "new_data.csv", "w") as new_data:
writer = csv_writer(new_data, delimiter=",")
for new_row in data:
writer.writerow(new_row)
1 ответ
Повторите каждую строку с дополнительным столбцом в диапазоне 1M..2M
Проблема в том, что вы сначала сохраняете все эти конфигурации в памяти. First of Python имеет не очень эффективную модель памяти, и, кроме того, миллион записей в строке в любом случае достаточно велик.
Я предлагаю не хранить данные в списке, а просто сразу записать их в файл:
total = 2000000
def resource_file(info):
with open(info, "r") as data_file:
reader = csv_reader(data_file, delimiter=",")
with open(work_dir + "new_data.csv", "w") as new_data:
writer = csv_writer(new_data, delimiter=",")
for row in reader:
rowa, rowb = row[0:2]
for data in xrange(1000000,total):
writer.writerow([rowa,rowb,data])
Взять строки 1М-2М файла
Если вы хотите взять строки от 1M до 2M исходного файла, вы можете записать его как:
from itertools import islice
total = 2000000
def resource_file(info):
with open(info, "r") as data_file:
reader = csv_reader(data_file, delimiter=",")
with open(work_dir + "new_data.csv", "w") as new_data:
writer = csv_writer(new_data, delimiter=",")
for row in islice(reader,1000000,total):
writer.writerow(row)
или вы можете упростить это, как говорит @JonClemens, с помощью:
from itertools import islice
total = 2000000
def resource_file(info):
with open(info, "r") as data_file:
reader = csv_reader(data_file, delimiter=",")
with open(work_dir + "new_data.csv", "w") as new_data:
writer = csv_writer(new_data, delimiter=",")
writer.writerows(islice(reader,1000000,total))