#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 fileprint(c,file=open("links.txt", "a"))
вызовет ошибку, потому что вы не можете установитьfile = open("links.txt", "a")
внутриprint()
.5. Raymond Mutyaba, большое вам спасибо! ! !… Я действительно оценил…. Я хотел бы поставить вам оценку infinite plus, но моя репутация меньше 15… код работает отлично… для меня это работает так: exec(строка) вместо exec line в globals(), locals()…. Большое вам спасибо! ! !