Skip to main content
 首页 » 编程设计

python之在 Python 中跨不同文件调用变量并处理循环导入

2025年05月04日30xiaohuochai

我目前正在用 Python 构建一个 docx/pdf 转换器,并决定将文件拆分为 2 个文档:

main.py - 控制程序的流程;

convert_to_text.py - 包含将 pdf/docx 文件转换为 txt 的函数。

目前,我在将全局变量 cv 传递给两个文件以及导入 convert_to_text.py 中的所有函数以在 main 中使用时遇到困难.py。这是我得到的错误:

C:\Python27\python.exe D:/cv-parser/main.py 
Traceback (most recent call last): 
  File "D:/cv-parser/main.py", line 1, in <module> 
    from convert_to_text import * 
  File "D:\cv-parser\convert_to_text.py", line 1, in <module> 
    from main import cv 
  File "D:\cv-parser\main.py", line 5, in <module> 
    document_to_text("resources\CV.pdf") 
NameError: name 'document_to_text' is not defined 
 
Process finished with exit code 1 

我该如何解决?

到目前为止,这是我的代码:

在 convert_to_text.py

from main import cv 
import docx 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import TextConverter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 
from cStringIO import StringIO 
 
 
def document_to_text(filename): 
    if filename[-5:] == ".docx": 
        doc = docx.Document(filename) 
        full_text = [] 
        for para in doc.paragraphs: 
            full_text.append(para.text) 
        global cv 
        cv = '\n'.join(full_text) 
        return cv 
    elif filename[-4:] == ".pdf": 
        return pdf_to_txt(filename) 
 
 
def pdf_to_txt(file_path): 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    fp = file(file_path, 'rb') 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    pagenos = set() 
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, 
                                  check_extractable=True): 
        interpreter.process_page(page) 
    fp.close() 
    device.close() 
    str = retstr.getvalue() 
    retstr.close() 
    global cv 
    cv = str 
    return cv 

在 main.py

from convert_to_text import * 
 
cv = 0 
 
document_to_text("resources\CV.pdf") 
print cv 

请您参考如下方法:

如果您从 main.py 中唯一需要的是 cv,您应该简单地将 cv 传递给需要它的函数。由于这些函数实际上并不使用 cv(除了设置它),所以也没有理由这样做。

你的整个问题可以通过简单地删除 main 的导入,并使用函数的返回值来设置 cv 来解决:

cv = document_to_text("resources\CV.pdf")