Как я могу расширить список возможностей в Python? - PullRequest
0 голосов
/ 30 августа 2018
read = open('700kLine.txt')

# use readline() to read the first line 

line = read.readline()

aList = []

for line in read:
    try:
        num = int(line.strip())
        aList.append(num)
    except:
        print ("Not a number in line " + line)

read.close()
print(aList)

В этом файле есть строка 700 КБ (каждая строка содержит до 2 цифр) Я могу получить только ~ 280 тыс. Строк в этом файле в моем aList.

Итак, как я могу увеличить емкость списка 280К до 700К или более? (Есть ли другое решение для этого случая?)

Здравствуйте, я только что решил эту проблему. Спасибо за вашу помощь. Это была очевидная проблема с буфером. Решение - просто увеличить размер буфера.

ссылка здесь Увеличение буфера вывода при запуске или отладке в PyCharm

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

Я пытался воссоздать вашу проблему:

# creating 700kLine file
with open('700kLine.txt', 'w') as f:
    for i in range(700000):
        f.write(str(i+1) + '\n')

# creating list from file entries
aList = []
with open('700kLine.txt', 'r') as f:
    for line in f:
        num = int(line.strip())
        aList.append(num)

# print(aList)
print(aList[:30])

Блокнот Jupyter выдает ошибку при печати всех строк 700 КБ из-за слишком большого объема используемой памяти. Если вы действительно хотите напечатать все 700k значений, запустите скрипт python из терминала.

0 голосов
/ 30 августа 2018

Да, вы можете.

Как только список определен, вы можете добавлять, редактировать или удалять его элементы. Чтобы добавить больше элементов в конце, используйте функцию append:

MyList.append(data)

Где MyList - имя списка, а data - элемент, который вы хотите добавить.

0 голосов
/ 30 августа 2018

Может быть, у вашего компьютера не хватает памяти для обработки файла? Я попытался сгенерировать бесконечный цикл, добавив одну цифру в список, и у меня получилось 47 миллионов символов len(list) >> 47119572, код, который я использую для проверки, как показано ниже.

Я попробовал этот код в онлайновом REPL, и он оказался значительно ниже 'len (list) `.

list = []

while True:
  try:
    if len(list) > 0:
      list.append(list[-1] + 1)
    else:
      list.append(1)
  except MemoryError:
      print("memory error, last count is: ", list[-1])
      raise MemoryError

Может быть, попробовать сохранить биты прочитанных данных вместо чтения всего файла сразу?

Только мое предположение.

0 голосов
/ 30 августа 2018

Пожалуйста, попробуйте это.

filename = '700kLine.txt'

with open(filename) as f:
    data = f.readlines()

print(data)
print(type(data)) #stores the data in a list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...