python 怎么引入上上级目录的文件

python 怎么引入上上级目录的文件,第1张

python导入同级别模块很方便:
import xxx
要导入下级目录页挺方便,需要在下级目录中写一个__init__py文件
from dirname import xxx
要导入上级目录,可以使用syspath:
首先syspath的作用是:当使用import语句导入模块时,解释器会搜索当前模块所在目录以及syspath指定的路径去找需要import的模块
所以改变思路,直接把上级目录加到syspath里:syspathappend('/')
from fatherdirname import xxx

在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和syspath中包含的路径例如包的安装地址。所以如果要在当前脚本引用其他文件,除了将文件放在和脚本同一目录下,还有以下几种方法,
1 将文件所在位置添加到syspath中
import sys
syspathinsert(0, '/path/to/application/app/folder') # or syspathappend('/path/to/application/app/folder')
import file
2 在文件目录下新建__init__py文件然后调用文件
from applicationappfolderfile import func_name
initpy文件
a)initpy文件的作用
该文件的主要作用使初始化Python包。如果目录下面包含了该文件,Python解释器就会将该目录当做一个包,下一步就可以使用import语句在别的py脚本中引用该目录下的文件。一个标准Python模块的结构如下所示:
package/
__init__py
filepy
file2py
subpackage/
__init__py
submodule1py
submodule2py
b) __init__文件可以为空但可以用来建立对包的需求。一般来说会在该文件中写那些类,函数等需要被导入到包水平,从而可以被方便的引用。比如:如果filepy文件中有一个File类,在initpy文件中啥都没写时引用File类需要这样 *** 作:
from packagefile import File
如果在__init__py文件中将file导入包,那就在包水平可以直接引用File类:
# in your __init__py
from file import File
# in your script
from package import File
此外,还需要注意的一点是__init__py文件中的all变量。如果解释器在__init__py文件中观察到了__all__变量,那么在运行from package import 时就只会引入__all__变量中列出的那些模块。例如:如果想在上述结构的只引入submodule1模块,那么可以在subpackage/__init__py文件中定义__all__ = ['submodule1'],当引用subpackage时from subpackage import 就只引入了submodule1模块。
3 将文件所在目录添加到python的环境变量
export PYTHONPATH=$HOME/pathToYourScripts/:$PYTHONPATH

使用Python自带的IDLE 在开始-->程序-->Python25(视你安装的版本而不同)中找到IDLE(Python GUI),

点击后d出如下窗体:

在>>>提示符后输入代码,回车,就可以执行此代码。

IDLE支持语法高亮,支持自动缩进,支持方法提示,不过提示的很慢。

在命令行窗口上运行 这种方法的前提是:你在系统的PATH变量中配置了Python的安装路径。

右键我的电脑-->属性-->高级-->环境变量,在系统变量列表中找到Path项,点击编辑按钮,在其中追加“C:\Python25;”(路径及版本视你安装而定),保存退出。

开始-->运行-->输入cmd,回车,开启一个CMD窗口。

在DOS提示符>后,输入python,回车,进入Python环境。

它的运行和IDLE基本一致,但是没有了语法高亮、自动缩进、方法提示,唯一的好处就是运行速度比IDLE快了些(如果你告诉我可以加参数运行python,那你就不算新手了,也不用看这篇文章了),所以用处不大。

退出此python环境使用Ctrl + Z,然后回车。

以脚本方式运行 以上两种运行方式虽然简便,但是不适合大量代码的开发,只适合查看单句或少量几句代码的运行结果,或者验证某函数的调用方法,而这恰恰是我们平时调试、验证程序的常用方式。如果是正式的开发,则应该使用独立脚本的方式运行。

打开你的文本编辑器(我是用EmEditor,当然你使用记事本、写字板也都可以),输入python代码,保存成py文件,然后双击运行它就可以执行了,当然前提也是必须配置系统PATH变量。

在其所在目录下开启一个CMD窗口,输入python py运行

在代码的最后增加如下语句:
raw_input()
然后你再双击运行,结果就会停留在那里,直到你敲击回车键才消失。

Linux下运行Python程序,一般说来有以下两种形式,其实和Windows下基本一样。

在IDLE中运行
在终端窗口输入$ python进入交互式运行环境,然后就可以边输入边执行代码了:
>>> print 'Hello Python'
Hello Python>>>退出使用Ctrl-D。

以脚本方式运行
在py脚本所在目录下输入。

稍微改变一下就行,下面详解。
如果
python
进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以
pyc
为扩展名的文件(
"pyc"
就是编译过的
"py"
源代码)。当程序运行之后,你会在那些源代码的附近(也就是说同一个目录下)看到这些文件python这样保存字节码是作为一种启动速度的优化。下一次运行程序时,如果你在上次保存字节码之后没有修改过源代码的话,python将会加载pyc文件并跳过编译这个步骤。当python必须重编译时,它会自动检查源文件和字节码文件的时间戳:如果你又保存了源代码,下次程序运行时,字节码将自动重新创建。

使用可打印的Unicode字元,可使用UTF-8或UTF-16。
使用空白字元为文件缩排来表示结构;不过不能使用跳格字元(TAB)。
注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
每个清单成员以单行表示,并用短杠+空白( - )起始。或使用方括号( [ ] ),并用逗号+空白( , )分开成员。

可以直接使用,不需要加载其他模块
例如:
def getSpringData(fname):
springData = open(fname, 'r')
distances = []
forces = []
for line in springData:
if line[0] == '#': continue
line = line[:-1]
elems = linersplit(':')
distancesappend(float(elems[0]))
forcesappend(float(elems[1]))
return distances,forces
这个函数从fname中取出d簧的位移和d力,文件格式是位移:d力,每组数据单占一行。
返回两个列表。

其实就是python怎么读取binnary
file
mnist的结构如下,选取train-images
TRAINING
SET
IMAGE
FILE
(train-images-idx3-ubyte):
[offset]
[type]
[value]
[description]
0000
32
bit
integer
0x00000803(2051)
magic
number
0004
32
bit
integer
60000
number
of
images
0008
32
bit
integer
28
number
of
rows
0012
32
bit
integer
28
number
of
columns
0016
unsigned
byte

pixel
0017
unsigned
byte

pixel

xxxx
unsigned
byte

pixel
也就是之前我们要读取4个
32
bit
integer
试过很多方法,觉得最方便的,至少对我来说还是使用
structunpack_from()
filename
=
'train-imagesidx3-ubyte'
binfile
=
open(filename
,
'rb')
buf
=
binfileread()
先使用二进制方式把文件都读进来
index
=
0
magic,
numImages
,
numRows
,
numColumns
=
structunpack_from('>IIII'
,
buf
,
index)
index
+=
structcalcsize('>IIII')
然后使用strucunpack_from
'>IIII'是说使用大端法读取4个unsinged
int32
然后读取一个测试是否读取成功
im
=
structunpack_from('>784B'
,buf,
index)
index
+=
structcalcsize('>784B')
im
=
nparray(im)
im
=
imreshape(28,28)
fig
=
pltfigure()
plotwindow
=
figadd_subplot(111)
pltimshow(im
,
cmap='gray')
pltshow()
'>784B'的意思就是用大端法读取784个unsigned
byte
完整代码如下
import
numpy
as
np
import
struct
import
matplotlibpyplot
as
plt
filename
=
'train-imagesidx3-ubyte'
binfile
=
open(filename
,
'rb')
buf
=
binfileread()
index
=
0
magic,
numImages
,
numRows
,
numColumns
=
structunpack_from('>IIII'
,
buf
,
index)
index
+=
structcalcsize('>IIII')
im
=
structunpack_from('>784B'
,buf,
index)
index
+=
structcalcsize('>784B')
im
=
nparray(im)
im
=
imreshape(28,28)
fig
=
pltfigure()
plotwindow
=
figadd_subplot(111)
pltimshow(im
,
cmap='gray')
pltshow()
只是为了测试是否成功所以只读了一张


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12959609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存