Python3.6 运行提示 ImportError: cannot import name 'CONFIG_FILE'
如下代码:
import os from utils.file_reader import YamlReader BASE_PATH = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0]
CONFIG_FILE = os.path.join(BASE_PATH, 'config', 'config.yml')
DATA_PATH = os.path.join(BASE_PATH, 'data')
DRIVER_PATH = os.path.join(BASE_PATH, 'drivers')
LOG_PATH = os.path.join(BASE_PATH, 'log')
REPORT_PATH = os.path.join(BASE_PATH, 'report') class Config:
def __init__(self, config = CONFIG_FILE):
self.config = YamlReader(config).data def get(self, element, index=0):
return self.config[index].get(element)
#coding = UTF-8 import os
import yaml
from xlrd import open_workbook from config.configg import CONFIG_FILE class YamlReader:
def __init__(self, yamlf):
if os.path.exists(yamlf): # 判断文件是否存在,如果文件不存在,则提示文件不存在并退出
self.yamlf = yamlf
else:
raise FileNotFoundError('文件不存在')
self._data = None @property
def data(self):
# _data只能在本类中调用
# 如果是第一次调用data,读取yaml文档,否则直接返回之前保存的数据
if not self._data:
with open(self.yamlf, 'rb') as f:
self._data = list(yaml.safe_load_all(f)) # load后是个generator,用list组织成列表
return self._data class SheetTypeError(Exception):
pass class ExcelReader:
"""
读取excel文件中的内容。返回list。 如:
excel中内容为:
| A | B | C |
| A1 | B1 | C1 |
| A2 | B2 | C2 | 如果 print(ExcelReader(excel, title_line=True).data),输出结果:
[{A: A1, B: B1, C:C1}, {A:A2, B:B2, C:C2}] 如果 print(ExcelReader(excel, title_line=False).data),输出结果:
[[A,B,C], [A1,B1,C1], [A2,B2,C2]] 可以指定sheet,通过index或者name:
ExcelReader(excel, sheet=2)
ExcelReader(excel, sheet='BaiDuTest')
"""
def __init__(self, excel, sheet=0, title_line=True):
if os.path.exists(excel):
self.excel = excel
else:
raise FileNotFoundError('excel文件不存在!')
self.sheet = sheet
self.title_line = title_line
self._data = list() @property
def data(self):
if not self._data:
workbook = open_workbook(self.excel)
if type(self.sheet) not in [int, str]:
raise SheetTypeError('Please pass in <type int> or <type str>, not {0}'.format(type(self.sheet)))
elif type(self.sheet) == int:
s = workbook.sheet_by_index(self.sheet) if self.title_line:
title = s.row_values(0) # 首行为title
for col in range(1, s.nrows):
# 依次遍历其余行,与首行组成dict,拼到self._data中
self._data.append(dict(zip(title, s.row_values(col))))
else:
for col in range(0, s.nrows):
# 遍历所有行,拼到self._data中
self._data.append(s.row_values(col))
return self._data if __name__ == '__main__':
y = CONFIG_FILE
reader = YamlReader(y)
print(reader.data)
def __init__(self, excel, sheet=0, title_line=True):
if os.path.exists(excel):
self.excel = excel
else:
raise FileNotFoundError('excel文件不存在!')
self.sheet = sheet
self.title_line = title_line
self._data = list() @property
def data(self):
if not self._data:
workbook = open_workbook(self.excel)
if type(self.sheet) not in [int, str]:
raise SheetTypeError('Please pass in <type int> or <type str>, not {0}'.format(type(self.sheet)))
elif type(self.sheet) == int:
s = workbook.sheet_by_index(self.sheet) if self.title_line:
title = s.row_values(0) # 首行为title
for col in range(1, s.nrows):
# 依次遍历其余行,与首行组成dict,拼到self._data中
self._data.append(dict(zip(title, s.row_values(col))))
else:
for col in range(0, s.nrows):
# 遍历所有行,拼到self._data中
self._data.append(s.row_values(col))
return self._data if __name__ == '__main__':
y = CONFIG_FILE
reader = YamlReader(y)
print(reader.data)
第二段代码运行时提示ImportError: cannot import name 'CONFIG_FILE'
在网上查了不少资料,最终确定是因为循环导入的原因,只要推迟进口就解决了,第二段代码修改如下:
#coding = UTF-8 import os
import yaml
from xlrd import open_workbook class YamlReader:
... ... if __name__ == '__main__':
from config.configg import CONFIG_FILE # 由最上面导入挪到此处就可以了
y = CONFIG_FILE
reader = YamlReader(y)
print(reader.data)
参考资料:https://stackoverflow.com/questions/1556387/circular-import-dependency-in-python
代码参考:http://blog.csdn.net/huilan_same/article/details/76572466
Python3.6 运行提示 ImportError: cannot import name 'CONFIG_FILE'的更多相关文章
- python 脚本中使用了第三方openpyxl 打包程序运行提示ImportError:cannot import name __version__
最近写了一个脚本,脚本中使用了第三方openpyxl(openpyxl是使用 pip install openpyxl 下载的),先是使用py2exe打包程序,打包过程中提示很多文件没有包含,在没有仔 ...
- python import eventlet包时提示ImportError: cannot import name eventlet
root@zte-desktop:/home/ubuntu/python-threads# cat eventlet.py #!/usr/bin python import eventlet from ...
- 关于python pip安装第三方库 jieba 中文分词工具后提示"ImportError: cannot import name 'Random'"报错问题
具体错误提示如下: >>> import jieba Traceback (most recent call last): File "<stdin>" ...
- django 提示ImportError: cannot import name json_response
from json_response import JsonResponse, json_response as json_resp 使用的语句如上,其实并不是没有安装,只是需要升级一下 pip in ...
- 解决ImportError: cannot import name HTTPConnection的方法
在写python程序的时候,使用from httplib import HTTPConnection,在run的时候提示ImportError: cannot import name HTTPConn ...
- ImportError: cannot import name gof
今天打开spyder说调试一个theano程序,但是import theano提示 ImportError: cannot import name gof 最后解决方案 pip install --u ...
- win7 32位 安装opencv-python后,运行时提示 "from .cv2 import *: DLL load failed: 找不到指定的模块" 的解决办法
安装opencv后,运行一个测试程序提示"from .cv2 import *: DLL load failed: 找不到指定的模块".于是百度一下解决办法,结果试了N多方法后也没 ...
- python 运行脚本报错 from keyword import iskeyword as _iskeyword ImportError: cannot import name iskeyword,说明python环境坏了,得重装,尚不知具体原因,
C:\Python27\Scripts>python task_test.pyTraceback (most recent call last): File "task_test.p ...
- import cx_Oracle报错,提示importError: DLL load failed: 不是有效的Win32程序。
问题说明1:WIN32,python是2.7版本,本地oracle client是32位的.import cx_Oracle报错,提示importError: DLL load failed: 该模块 ...
随机推荐
- 2019年春季学期第四周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...
- [js]javascript索引
js&jq总结的还是挺棒的: http://www.cnblogs.com/yuanchenqi/articles/5980312.html http://www.cnblogs.com/yu ...
- kali在vbox上运行设置共享文件夹
mount -t vboxsf VBoxShared /root/Desktop/vbox 0x00 使用共享文件夹的前提 需要自行安装增强功能:https://jingyan.baidu.com/a ...
- Percona-Toolkit 之 pt-table-sync 总结
pt-table-sync - Synchronize MySQL table data efficiently. pt-table-sync synchronizes data efficientl ...
- 2018-2019-2 网络对抗技术 20165321 Exp4 恶意代码分析
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sys ...
- python-soap接口请求
一.环境准备 方法一: >pip3 install suds >pip3 install suds-jurko 因在线安装报错,所以直接下载安装包. 方法二: 1.suds库下载地址:ht ...
- 控制反转IOC
IOC-Inversion of Control 控制反转,这是spring的核心.对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系. 1:控制反转不是一种技术,而是 ...
- centos7.2 Apache+PHP7.2+Mysql5.6环境搭建
yum安装PHP7.2 由于linux的yum源不存在php7.x,所以我们要更改yum源:rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-re ...
- jquery的输入框自动补全功能+ajax
jquery的输入框自动补全功能+ajax 2017年05月10日 18:51:39 辣姐什么鬼 阅读数:1461 标签: web前端 更多 个人分类: web前端 内容参考网友文章写成,原博的链 ...
- python之xml模块
# XML 模块的操作参考链接 # http://www.cnblogs.com/yuanchenqi/articles/5732581.html