关于Python包非同级导入若干问题

原创 云深之无迹 2021-08-22 21:55


好气啊,spark运行不了就算了,自己写的程序也是一键砸锅。/(ㄒoㄒ)/~~


不得不说,调试真好用

一下就看出来,路径加载错误了


算法理论是一方面,实践又是一方面。尊重每一个可以运行的算法,无论它结果怎么样。这个过程真的是没有地方找人说,程序和数学一样精确,对错看结果就行。



还是先补补相关知识吧:

  1. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd();

  2. 返回指定目录下的所有文件和目录名:os.listdir();

  3. 函数用来删除一个文件:os.remove();

  4. 删除多个目录:os.removedirs(r“c:\python”);

  5. 检验给出的路径是否是一个文件:os.path.isfile();

  6. 检验给出的路径是否是一个目录:os.path.isdir();

  7. 判断是否是绝对路径:os.path.isabs();

  8. 检验给出的路径是否真地存:os.path.exists();

  9. 返回一个路径的目录名和文件名:os.path.split();

  10. 分离扩展名:os.path.splitext()。


import osos.getcwd()

导入


'c:\\Users\\yunswj\\Desktop\\精通数据科学算法\\DataScienceAlgorithmsinaWeek_Code\\DataScienceAlgorithmsinaWeek_Code'

结果


import pprint
pprint.pprint(os.listdir)

总之是内置的库,用到时候引入就行



其实最想解决的问题是,当你想引入的一个包,不在你的当前文件,或者在上一层目录,或者是在某个文件夹里面,怎么办啊?


大多数的方案是这个,确实有点效果,但我的执行效果不是这样的。


解决模块的问题:


  1. 向 sys.path 中临时添加模块文件存储位置的完整路径;

  2. 将模块放在 sys.path 变量中已包含的模块加载路径中;

  3. 设置 path 系统环境变量。


import sys  sys.path.append(’需要引用模块的地址')  sys.path.append(..)   # 这代表添加当前路径的上一级目录

你看


确实是有,但是会引入吗?


这说了,是一个模块


其实是引入了,不过是短暂的引入一次,别的文件不引入就失效了。。。



sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__FILE__))))

真真的引入应该是这样的


获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径;


通过调用 __file__ 属性输出的绝对路径,我们可以很轻易地找到该模块(或包)的源文件。



Python 的扩展模块添加在 lib\site-packages 路径下,它专门用于存放 Python 的扩展模块和包。


.   ;  d:\python_ module

路径


点的意思是,当前路径读取。分号是分隔路径,然后后面是绝对的路径。


只有以“from 模块名 import *”形式导入的模块,当该模块设有 __all__ 变量时,只能导入该变量指定的成员,未指定的成员是无法导入的。


__all__ 变量仅限于在其它文件中以“from 模块名 import *”的方式引入。也就是说,如果使用以下 2 种方式引入模块,则 __all__ 变量的设置是无效的。


import 模块名


from 模块名 import 成员


每个包的目录下都必须建立一个 __init__.py 的模块,可以是一个空模块,可以写一些初始化代码,其作用就是告诉 Python 要将该目录当成包来处理。

注意,__init__.py 不同于其他模块文件,此模块的模块名不是 __init__,而是它所在的包名。例如,在 settings 包中的 __init__.py 文件,其模块名就是 settings。


包就是一个目录,好好记住这个。


看个例子


http://c.biancheng.net/view/4669.html

这个链接里面有更多的精彩描述


当直接导入指定包时,程序会自动执行该包所对应文件夹下的 __init__.py 文件中的代码。



import stringprint(dir(string))
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']


import stringprint([e for e in dir(string) if not e.startswith('_')])

使用这个代码就会下划线的方法不输出


导入包,实际就是执行的__init__的文件

也就是说__file__就是__init__文件的所在位置


也就是说,没有init的文件,就没有输出


我知道对于屏幕前的你,已经很补耐烦了,可能都没有在看。但是你要想写点东西出来,这些是基础知识中的基础知识了。



在程序的前面,我写了这个图像的风格

import matplotlib.pyplot as pltimport numpy as npplt.style.use('ggplot')
# Fixing random state for reproducibilitynp.random.seed(19680801)
fig, axes = plt.subplots(ncols=2, nrows=2)ax1, ax2, ax3, ax4 = axes.ravel()
# scatter plot (Note: `plt.scatter` doesn't use default colors)x, y = np.random.normal(size=(2, 200))ax1.plot(x, y, 'o')
# sinusoidal lines with colors from default color cycleL = 2*np.pix = np.linspace(0, L)ncolors = len(plt.rcParams['axes.prop_cycle'])shift = np.linspace(0, L, ncolors, endpoint=False)for s in shift: ax2.plot(x, np.sin(x + s), '-')ax2.margins(0)
# bar graphsx = np.arange(5)y1, y2 = np.random.randint(1, 25, size=(2, 5))width = 0.25ax3.bar(x, y1, width)ax3.bar(x + width, y2, width, color=list(plt.rcParams['axes.prop_cycle'])[2]['color'])ax3.set_xticks(x + width)ax3.set_xticklabels(['a', 'b', 'c', 'd', 'e'])
# circles with colors from default color cyclefor i, color in enumerate(plt.rcParams['axes.prop_cycle']): xy = np.random.normal(size=2) ax4.add_patch(plt.Circle(xy, radius=0.3, color=color['color']))ax4.axis('equal')ax4.margins(0)
plt.show()


出现的图,其实是扁平化的图案


import numpy as npimport matplotlib.patches as mpatches# 绘制一个圆形import matplotlib.pyplot as plt# 相当于matlab的绘图apiimport matplotlib
matplotlib.style.use('ggplot')

# sys.path.append('.//Common')# 对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append('xxx')# 这个操作是添加搜索目录# pprint.pprint(sys.path)# 更加好看的打印方式
data_file_name = 'mary_and_temperature_preferences_completed.data'temp_from = 5temp_to = 30wind_from = 0wind_to = 10

# 返回一个包含3个列表的字典。第一个是x坐标。# 第二个是y坐标,第三个是数值的颜色

def get_x_y_colors(data): dic = {} dic['x'] = [0] * len(data) dic['y'] = [0] * len(data) dic['colors'] = [0] * len(data) for i in range(0, len(data)): dic['x'][i] = data[i][0] dic['y'][i] = data[i][1] dic['colors'][i] = data[i][2] return dic

data = np.loadtxt(open(data_file_name, 'r'), dtype={ 'names': ('temperature', 'wind', 'perception'), 'formats': ('i4', 'i4', 'S4')})
# 将类转换为要在图中显示的颜色。for i in range(0, len(data)): if data[i][2] == 'cold': data[i][2] = 'blue' elif data[i][2] == 'warm': data[i][2] = 'red' else: data[i][2] = 'gray'
# 将数组转换为可用于绘图功能的格式。data_processed = get_x_y_colors(data)
# 绘图

plt.title('Mary and temperature preferences')plt.xlabel('temperature in C')plt.ylabel('wind speed in kmph')plt.axis([temp_from, temp_to, wind_from, wind_to])# Add legends to the graph.blue_patch = mpatches.Patch(color='blue', label='cold')red_patch = mpatches.Patch(color='red', label='warm')plt.legend(handles=[blue_patch, red_patch])plt.scatter(data_processed['x'], data_processed['y'], c=data_processed['colors'], s=[1400] * len(data))plt.show()


7 3 cold6 9 cold12 1 cold16 6 cold16 9 cold14 4 cold13 4 cold19 4 warm18 4 cold15 1 cold5 6 cold20 7 cold25 1 warm22 6 warm21 6 warm27 2 warm26 6 warm8 5 cold23 7 warm5 8 cold28 5 warm10 8 cold9 0 cold6 7 cold30 0 warm29 8 warm11 5 cold10 7 cold16 3 cold17 7 cold12 6 cold8 8 cold17 2 warm14 1 cold13 7 cold20 9 cold19 3 warm18 9 cold5 7 cold24 1 warm20 4 warm22 3 warm27 1 warm8 2 cold23 10 cold28 10 cold9 3 cold15 5 cold6 0 cold11 0 cold16 0 cold16 5 cold14 2 cold13 10 cold6 8 cold25 10 cold26 1 warm21 9 cold9 9 cold23 9 cold29 1 warm7 8 cold14 8 cold13 0 cold12 8 cold19 8 cold18 0 warm17 8 cold24 8 warm20 3 warm25 5 warm21 2 warm5 4 cold27 6 warm26 2 warm8 9 cold23 3 warm22 9 cold28 1 warm9 4 cold5 1 cold29 4 warm10 3 cold7 2 cold12 2 cold11 10 cold17 6 cold16 10 cold14 5 cold13 3 cold19 7 cold18 5 cold16 4 cold15 0 cold15 6 cold21 8 cold20 0 warm26 8 warm25 0 warm22 7 warm21 5 warm27 5 warm26 7 warm8 6 cold23 6 warm22 10 cold28 6 warm10 9 cold9 7 cold6 4 cold30 1 warm29 7 warm11 4 cold10 4 cold7 1 cold12 7 cold11 9 cold17 1 warm15 10 cold14 6 cold13 6 cold20 10 cold19 2 warm18 6 cold24 2 warm20 5 warm25 3 warm22 0 warm5 5 cold27 0 warm8 3 cold23 5 warm5 10 cold10 10 cold9 2 cold6 1 cold30 2 warm29 10 cold11 3 cold16 1 cold12 4 cold15 9 cold14 3 cold13 9 cold19 1 warm7 6 cold15 7 cold6 10 cold9 8 cold8 0 cold23 8 warm30 8 warm29 0 warm28 8 warm6 2 cold14 9 cold12 9 cold18 1 warm24 9 warm25 9 warm25 4 warm21 1 warm26 3 warm8 10 cold23 2 warm28 2 warm27 10 cold5 0 cold29 3 warm10 0 cold12 3 cold17 5 cold30 6 warm14 10 cold13 2 cold30 5 warm19 6 cold18 2 warm17 10 cold15 3 cold20 1 warm26 9 warm7 7 cold15 4 cold21 4 warm19 9 cold27 4 warm26 4 warm8 7 cold23 1 warm24 4 warm28 7 warm27 9 warm9 6 cold6 5 cold5 3 cold29 6 warm11 7 cold10 5 cold7 0 cold24 7 warm12 0 cold11 8 cold17 0 warm16 8 cold14 7 cold13 5 cold19 5 warm18 7 cold24 3 warm21 10 cold20 6 warm26 10 cold25 2 warm22 1 warm21 7 cold27 3 warm8 4 cold23 4 warm5 9 cold28 4 warm20 8 cold9 1 cold6 6 cold30 3 warm29 9 warm11 2 cold10 6 cold16 2 cold12 5 cold17 3 warm15 8 cold14 0 cold13 8 cold30 4 warm19 0 warm18 8 cold25 8 warm24 0 warm7 4 cold22 2 warm8 1 cold30 9 warm28 9 warm6 3 cold11 1 cold16 7 cold7 10 cold24 6 warm12 10 cold19 10 cold24 10 cold21 0 warm26 0 warm30 7 warm28 3 warm9 10 cold30 10 cold29 2 warm10 1 cold25 7 warm18 10 cold17 4 cold7 9 cold13 1 cold24 5 warm18 3 warm17 9 cold15 2 cold22 4 warm20 2 warm25 6 warm22 5 warm21 3 warm27 7 warm26 5 warm7 5 cold23 0 warm22 8 warm28 0 warm27 8 warm9 5 cold5 2 cold29 5 warm11 6 cold10 2 cold


本来是想写K近邻算法,可惜有错误。我又走神了,这是对代码的可视化部分




评论
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 78浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 69浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 45浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 68浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 44浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 65浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 105浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 101浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 84浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 70浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦