Em um script Python, eu queria testar diferentes strings HTML usando a mesma lógica. Minha abordagem foi percorrer um intervalo para criar várias instâncias das variáveis de string HTML, mas não estava funcionando conforme o esperado.
# DO NOT DO THIS for i in range(1, 5): html = f"html{i}" soup = BeautifulSoup(html, "html.parser") print('----', soup)
O comportamento que estava observando se deve à forma como a string formatada f"html{i}" é interpretada. No meu código, f"html{i}" avalia os literais "html1", "html2", "html3" e "html4" em vez do conteúdo das variáveis chamadas html1, html2, etc.
Python não substitui automaticamente f"html{i}" pelo valor da variável cujo nome é criado dinamicamente, como html1 ou html2. Em vez disso, ele avalia a string como um padrão fixo composto pelo prefixo "html" seguido pelo valor de i.
Se eu quiser usar o conteúdo de variáveis predefinidas html1, html2, etc., preciso recuperar explicitamente seus valores, por exemplo, usando um dicionário para mapear nomes de strings para seu conteúdo real.
Aqui está um exemplo que ilustra isso:
from bs4 import BeautifulSoup # Define the variables html1 = "Test 1" html2 = "Test 2" html3 = "Test 3" html4 = "Test 4" # Store them in a dictionary for easy access html_dict = { "html1": html1, "html2": html2, "html3": html3, "html4": html4 } # Iterate and process each html content for i in range(1, 5): key = f"html{i}" html = html_dict[key] soup = BeautifulSoup(html, "html.parser") print('----', soup)
Definir variáveis:
Dicionário para pesquisa de variáveis:
Iterar sobre chaves:
Analisar e imprimir:
---- Test 1 ---- Test 2 ---- Test 3 ---- Test 4
Essa abordagem acessa dinamicamente o conteúdo das variáveis com base no índice de iteração e imprime corretamente o conteúdo pretendido.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3