关于Python包非同级导入若干问题
好气啊,spark运行不了就算了,自己写的程序也是一键砸锅。/(ㄒoㄒ)/~~
不得不说,调试真好用
一下就看出来,路径加载错误了
算法理论是一方面,实践又是一方面。尊重每一个可以运行的算法,无论它结果怎么样。这个过程真的是没有地方找人说,程序和数学一样精确,对错看结果就行。
还是先补补相关知识吧:
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd();
返回指定目录下的所有文件和目录名:os.listdir();
函数用来删除一个文件:os.remove();
删除多个目录:os.removedirs(r“c:\python”);
检验给出的路径是否是一个文件:os.path.isfile();
检验给出的路径是否是一个目录:os.path.isdir();
判断是否是绝对路径:os.path.isabs();
检验给出的路径是否真地存:os.path.exists();
返回一个路径的目录名和文件名:os.path.split();
分离扩展名:os.path.splitext()。
import os
os.getcwd()
导入
'c:\\Users\\yunswj\\Desktop\\精通数据科学算法\\DataScienceAlgorithmsinaWeek_Code\\DataScienceAlgorithmsinaWeek_Code'
结果
import pprint
pprint.pprint(os.listdir)
总之是内置的库,用到时候引入就行
其实最想解决的问题是,当你想引入的一个包,不在你的当前文件,或者在上一层目录,或者是在某个文件夹里面,怎么办啊?
大多数的方案是这个,确实有点效果,但我的执行效果不是这样的。
解决模块的问题:
向 sys.path 中临时添加模块文件存储位置的完整路径;
将模块放在 sys.path 变量中已包含的模块加载路径中;
设置 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 string
print(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 string
print([e for e in dir(string) if not e.startswith('_')])
使用这个代码就会下划线的方法不输出
导入包,实际就是执行的__init__的文件
也就是说__file__就是__init__文件的所在位置
也就是说,没有init的文件,就没有输出
我知道对于屏幕前的你,已经很补耐烦了,可能都没有在看。但是你要想写点东西出来,这些是基础知识中的基础知识了。
在程序的前面,我写了这个图像的风格
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')
# Fixing random state for reproducibility
np.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 cycle
L = 2*np.pi
x = 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 graphs
x = np.arange(5)
y1, y2 = np.random.randint(1, 25, size=(2, 5))
width = 0.25
ax3.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 cycle
for 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 np
import matplotlib.patches as mpatches
# 绘制一个圆形
import matplotlib.pyplot as plt
# 相当于matlab的绘图api
import 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 = 5
temp_to = 30
wind_from = 0
wind_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 cold
6 9 cold
12 1 cold
16 6 cold
16 9 cold
14 4 cold
13 4 cold
19 4 warm
18 4 cold
15 1 cold
5 6 cold
20 7 cold
25 1 warm
22 6 warm
21 6 warm
27 2 warm
26 6 warm
8 5 cold
23 7 warm
5 8 cold
28 5 warm
10 8 cold
9 0 cold
6 7 cold
30 0 warm
29 8 warm
11 5 cold
10 7 cold
16 3 cold
17 7 cold
12 6 cold
8 8 cold
17 2 warm
14 1 cold
13 7 cold
20 9 cold
19 3 warm
18 9 cold
5 7 cold
24 1 warm
20 4 warm
22 3 warm
27 1 warm
8 2 cold
23 10 cold
28 10 cold
9 3 cold
15 5 cold
6 0 cold
11 0 cold
16 0 cold
16 5 cold
14 2 cold
13 10 cold
6 8 cold
25 10 cold
26 1 warm
21 9 cold
9 9 cold
23 9 cold
29 1 warm
7 8 cold
14 8 cold
13 0 cold
12 8 cold
19 8 cold
18 0 warm
17 8 cold
24 8 warm
20 3 warm
25 5 warm
21 2 warm
5 4 cold
27 6 warm
26 2 warm
8 9 cold
23 3 warm
22 9 cold
28 1 warm
9 4 cold
5 1 cold
29 4 warm
10 3 cold
7 2 cold
12 2 cold
11 10 cold
17 6 cold
16 10 cold
14 5 cold
13 3 cold
19 7 cold
18 5 cold
16 4 cold
15 0 cold
15 6 cold
21 8 cold
20 0 warm
26 8 warm
25 0 warm
22 7 warm
21 5 warm
27 5 warm
26 7 warm
8 6 cold
23 6 warm
22 10 cold
28 6 warm
10 9 cold
9 7 cold
6 4 cold
30 1 warm
29 7 warm
11 4 cold
10 4 cold
7 1 cold
12 7 cold
11 9 cold
17 1 warm
15 10 cold
14 6 cold
13 6 cold
20 10 cold
19 2 warm
18 6 cold
24 2 warm
20 5 warm
25 3 warm
22 0 warm
5 5 cold
27 0 warm
8 3 cold
23 5 warm
5 10 cold
10 10 cold
9 2 cold
6 1 cold
30 2 warm
29 10 cold
11 3 cold
16 1 cold
12 4 cold
15 9 cold
14 3 cold
13 9 cold
19 1 warm
7 6 cold
15 7 cold
6 10 cold
9 8 cold
8 0 cold
23 8 warm
30 8 warm
29 0 warm
28 8 warm
6 2 cold
14 9 cold
12 9 cold
18 1 warm
24 9 warm
25 9 warm
25 4 warm
21 1 warm
26 3 warm
8 10 cold
23 2 warm
28 2 warm
27 10 cold
5 0 cold
29 3 warm
10 0 cold
12 3 cold
17 5 cold
30 6 warm
14 10 cold
13 2 cold
30 5 warm
19 6 cold
18 2 warm
17 10 cold
15 3 cold
20 1 warm
26 9 warm
7 7 cold
15 4 cold
21 4 warm
19 9 cold
27 4 warm
26 4 warm
8 7 cold
23 1 warm
24 4 warm
28 7 warm
27 9 warm
9 6 cold
6 5 cold
5 3 cold
29 6 warm
11 7 cold
10 5 cold
7 0 cold
24 7 warm
12 0 cold
11 8 cold
17 0 warm
16 8 cold
14 7 cold
13 5 cold
19 5 warm
18 7 cold
24 3 warm
21 10 cold
20 6 warm
26 10 cold
25 2 warm
22 1 warm
21 7 cold
27 3 warm
8 4 cold
23 4 warm
5 9 cold
28 4 warm
20 8 cold
9 1 cold
6 6 cold
30 3 warm
29 9 warm
11 2 cold
10 6 cold
16 2 cold
12 5 cold
17 3 warm
15 8 cold
14 0 cold
13 8 cold
30 4 warm
19 0 warm
18 8 cold
25 8 warm
24 0 warm
7 4 cold
22 2 warm
8 1 cold
30 9 warm
28 9 warm
6 3 cold
11 1 cold
16 7 cold
7 10 cold
24 6 warm
12 10 cold
19 10 cold
24 10 cold
21 0 warm
26 0 warm
30 7 warm
28 3 warm
9 10 cold
30 10 cold
29 2 warm
10 1 cold
25 7 warm
18 10 cold
17 4 cold
7 9 cold
13 1 cold
24 5 warm
18 3 warm
17 9 cold
15 2 cold
22 4 warm
20 2 warm
25 6 warm
22 5 warm
21 3 warm
27 7 warm
26 5 warm
7 5 cold
23 0 warm
22 8 warm
28 0 warm
27 8 warm
9 5 cold
5 2 cold
29 5 warm
11 6 cold
10 2 cold
本来是想写K近邻算法,可惜有错误。我又走神了,这是对代码的可视化部分