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

好气啊,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近邻算法,可惜有错误。我又走神了,这是对代码的可视化部分

(0)

相关推荐

  • Python气象数据处理与绘图:克里金(Kriging)插值与可视化

    克里金法(Kriging) 是依据协方差函数对随机过程/随机场进行空间建模和预测(插值)的回归算法.在特定的随机过程,例如固有平稳过程中,克里金法能够给出最优线性无偏估计(Best Linear Un ...

  • 生命科学中的 UMAP(降维算法)

    UMAP应该说是目前最好的降维算法了,能最大程度的保留原始数据的特征同时大幅度的降低特征维数. 这是<生命科学的数理统计和机器学习>的相关探讨,我试图介绍生物信息学.生物医学.遗传学等常见 ...

  • Matplotlib等高线图

    等高线图(也称"水平图")是一种在二维平面上显示 3D 图像的方法.等高线有时也被称为 "Z 切片",如果您想要查看因变量 Z 与自变量 X.Y 之间的函数图像 ...

  • 时间序列的平稳性检验方法汇总

    TimeSeries 当当当,分享时间序列相关知识 4篇原创内容 Official Account 上文我们已经知道了什么是时间序列的平稳性,也见到了一些平稳时间序列和非平稳的时间序列,那么当我们有一 ...

  • python 包机制、导入模块

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/python 包机制.导入模块 作者:融水公子 rsgz Python3 教程 python教程 http://www.rsgz.top/post ...

  • 千万别说你会Python!如果不知道这10个Python包!

    世界上有超过200,000个Python程序包(这只是基于官方的Python程序包索引PyPI托管的程序包). 这就引出了一个问题:拥有这么多的软件包,每个Python程序员都需要学习哪些软件包是最重 ...

  • 如何快速一次性卸载所有python包(第三方库)呢?

    很多时候我们都会有一个麻烦事,就是打开pycharm或者VScode等的时候,都有可能因为自己电脑上面安装的第三方模块过多,导致电脑很卡,风扇转速不停地增加,这时候我们就会想去卸载一些不太用得着的第三 ...

  • appium+python自动化51-adb文件导入和导出

    前言 用手机连电脑的时候,有时候需要把手机(模拟器)上的文件导出到电脑上,或者把电脑的图片导入手机里做测试用,我们可以用第三方的软件管理工具直接复制粘贴,也可以直接通过adb命令导入和导出. adb ...

  • AMD的PyTorch机器学习工具,现在是一个Python包了

    AI算法与图像处理 前天 来源:机器之心 前段时间,机器学习开源框架 PyTorch 提供了对 AMD ROCm 的支持,现在可作为 Python 软件包提供. 作为一款被学术界和工业界广泛使用的开源 ...

  • FANUC | 参数包制作及导入方法

    FANUC | 参数包制作及导入方法

  • 如何批量更新电脑中的python包?

    方法1: pip 命令行切换到桌面 cd desktop 在桌面生成requirements.txt,该文件主要记录本地安装的包及其版本号 pip freeze > requirements.t ...

  • 听说你安装Python包很慢,试试这个方法

    使用Python有快五年了,最近这一年多,经常听到大家说在安装python第三方包很慢很慢. 比如这速度,每秒十几kb 而网络正常的情况下,pip下载的速度至少应该每秒几百kb才对,甚至还有可能更快, ...

  • 使用Python处理手机通讯录导入与导出文件

    最近遇到一个问题 如何将通讯录信息导出到csv 如何将csv导入到通讯录 网上大多都是在说使用Vcard文件,这种文件是手机自带通讯录app能识别的文件格式. 但是试了网上各种服务,废了很大的劲头儿也 ...