首页 > 解决方案 > 如何仅从其他 py 文件中导入变量?

问题描述

您好我正在尝试通过抓取新闻文章来实现类似的文档推荐和搜索功能。下面是一个 py 文件,它加载新闻文章并将信息存储在一个数组中。

from daumnews import get_news_daum, get_news_contents_seoulgyeongje
from sklearn.feature_extraction.text import TfidfVectorizer
import os
links, titles = get_news_daum() 

#get_news_daum()函数执行时,链接和标题会以列表形式保存在链接和标题变量中。

contents = []
similarities = []

os.chdir("C:/Users/hanbonghun/Desktop/newsscrapping/news")
for i in range(len(links)):
    with open(f'{i+1}.txt',"w",encoding="utf-8") as f:
        contents.append(get_news_contents_seoulgyeongje(f,links[i]))

        

#get_news_contents_seoulgyeongje()函数执行时,将抓取的文档的标题和内容保存在特定的文件夹中,并将每个内容作为一个列表保存在contents变量中。

vect = TfidfVectorizer(min_df=1, stop_words="english")
tfidf = vect.fit_transform(contents)
pairwise_similarity = tfidf * tfidf.T
similarities = pairwise_similarity.toarray()

print("succeeded in reading news articles.\n")

#分析内容元素相似度的部分

结果,当你运行get_news.py时,链接和标题存储在链接标题中,内容和相似度存储在文章和每篇文章的相似度中。问题是我只想从其他py文件中加载和使用这些变量,但是通过import导入变量时,get_news.py的所有内容都执行一次,耗时比较长。有没有办法只获取通过从另一个文件执行 get_news.py 获得的变量?

标签: pythonweb-scrapingimport

解决方案


如果您不想在导入文件时运行代码,则将代码放入函数中 - 即。main()- 并添加

 if __name__ == '__main__':
     main()

main()只有当你直接运行这个脚本时它才会运行代码python get_news.py


links = None
titles = None

contents = []
similarities = []

def main():
    global links
    global titles 
    
    links, titles = get_news_daum() 

    os.chdir("C:/Users/hanbonghun/Desktop/newsscrapping/news")
    for i in range(len(links)):
        with open(f'{i+1}.txt',"w",encoding="utf-8") as f:
            contents.append(get_news_contents_seoulgyeongje(f,links[i]))

    # ... code ...


 if __name__ == '__main__':
     main()

但是,如果您不运行代码,那么变量将为空。

如果您将变量的值保存在文件中,那么您应该创建从文件中读取值并直接返回值的函数,然后您应该导入此函数(不是变量)并使用它

from get_news import read_data_from_file

links, titles, contents, similarities = read_data_from_file()

推荐阅读