Запускать каждые N строк из другого файла в запущенном файле?

#python #python-3.x #database #file #exec

#python #python-3.x #База данных #файл #exec

Вопрос:

У меня есть большой файл, который я запускаю на python, и я разделяю его, потому что он потребляет слишком много оперативной памяти … но в результате получается 250 файлов кода python, и я слишком запускаю его по одному, и это отнимает слишком много времени… Я хочу выполнять только 5 строк одновременно из большого файла, не разделяя его и практически не используя оперативную память…

Файл:

 import requests
from bs4 import BeautifulSoup
lines = 5
with open('finito.py') as bigfile:
# Execute every 5 lines?? 
 

Пример Finito_file:

 url = 'https://result.com/'
reqs = requests.get(url)
soup = BeautifulSoup(reqs.text, 'lxml')
c=soup.find_all('h2')[0:4]
print(c,file=open("links.txt", "a"))
 

Из большого файла каждая строка 5 выглядит так…

Пример вывода:

 []
[<h2 class="tile--hero__headline"><span style="overflow:hidden;display:block"><span>Home For the Holidays</span></span></h2>, <h2 class="tile--hero__headline"><span style="overflow:hidden;display:block"><span>Disney  Original Special</span></span></h2>, <h2 class="tile--hero__headline"><span style="overflow:hidden;display:block"><span>The Great Christmas Light Fight</span></span></h2>, <h2 class="tile--hero__headline"><span style="overflow:hidden;display:block"><span>Big Sky</span></span></h2>]
 

Это результат каждых 5 строк кода из finito.py … весь результат будет сохранен в links.txt

Комментарии:

1. Вы могли бы попробовать написать функцию

Ответ №1:

Используется readline() для чтения файла построчно без сохранения всего файла в памяти.

 def nextFive(file):
    lines = []
    for line in range(5):
        line = file.readline()
        if line:
            lines.append(line)
    return lines

bigFile = open('finito.py')
code = nextFive(bigFile)
while len(code) > 0:
    # Execute every 5 lines of code
    for line in code:
        exec line in globals(), locals()
    code = nextFive(bigFile)
bigFile.close()
 

Комментарии:

1. СПАСИБО ВАМ, Раймонд Мутьяба! ! но, строка 14, в <module> code = nextFive(bigFile) Ошибка имени: имя ‘bigFile’ не определено

2. Я не использовал заглавную букву f в bigfile, когда определял ее. Я только что отредактировал свой ответ, чтобы исправить ошибку.

3. Еще раз спасибо, Рэймонд !, но я m really sorry to bother you again... there is a bug problem every time I execute the program... When I debug it in Pycharm, it open bigFile = open('finito.py'), but it doesn't read anything and when it goes to code = nextFive(bigFile) and def... it return False and close the program because it didn ничего не нахожу в файле… Я m trying to fixed but I don не вижу, как??

4. Я отредактировал свой код, чтобы исправить некоторые ошибки. Кроме того, exec line не будет выполняться, если в коде есть ошибки в ‘finito.py «. В вашем примере finito file print(c,file=open("links.txt", "a")) вызовет ошибку, потому что вы не можете установить file = open("links.txt", "a") внутри print() .

5. Raymond Mutyaba, большое вам спасибо! ! !… Я действительно оценил…. Я хотел бы поставить вам оценку infinite plus, но моя репутация меньше 15… код работает отлично… для меня это работает так: exec(строка) вместо exec line в globals(), locals()…. Большое вам спасибо! ! !