当前位置:首页 » 网页前端 » Python数据存储位置要和脚本位置一致
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

Python数据存储位置要和脚本位置一致

发布时间: 2022-05-07 06:31:29

1. 怎么用命令行执行python脚本

在命令行模式下,可以执行python进入Python交互式环境,也可以执行python hello.py运行一个.py文件,但是在Python交互式环境
下,只能输入Python代码执行。
下面是命令行中执行Python脚本:
首先用文本编辑器编辑一个简单的hello.py(注意后缀一定要正确),然后我将它保存在E盘中的pythoncode文件夹中,即存储位置为
E:pythoncodehello.py.
然后打开命令行 输入python+文件所在的路径,回车即可运行成功;也可将要运行的文件拖拽到python后面的空格处,会发现文件所在
路径自动出现,回车同样运行成功。如下图
更多知识请关注Python视频教程。

2. 为什么只有把脚本放到与python同一目录下才能运行

题主你好,
正常情况下python脚本放在什么位置都能运行,只需输入:
python 脚本的绝对路径
如果出现题主说的这种情况,应该是没有将python可执行程序的绝对路径放到环境变量中,目前我能想到的只有这一种情况. 举例来说, 我们在linux下输入ls命令后,会看到当前目录下的文件及文件夹情况,这是因为ls这个命令的绝对路径被放到了这个环境变量中. 如果我们将ls命令文件所在路径从环境变量中删除,则我们在命令行下输入这个最基本的命令也会提示 找不到命令 相关的提示.

但现在的问题是我不知道题主那边具体是什么情况,不同的情况处理方法不同,所以现在需要题主追问:
1.你使用的系统是windows还是linux,mac 等等?
2.题主执行脚本的方式是双击后缀为.py的文件?还是使用" python 脚本名 "的方式?

3. 如何获得Python脚本所在目录的位置

如果想得到脚本的路径,那么得这样:
os.path.split(os.path.realpath(__file__))[0]
其中__file__虽然是所在.py文件的完整路径,但是这个变量有时候返回相对路径,有时候返回绝对路径,因此还要用os.path.realpath()函数来处理一下。
os.getcwd()是不对的,只能得到当前目录位置

4. python数据框存储位置

在settings.py文件中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

数据在db.sqlite3文件中

5. python找文件存放路径为什么和真实存储路径不一样

os.path.abspath函数所获取的"当前文件路径"都是被执行的脚本文件的所在路径.
你当前执行的这个py的程序是放在F盘的吧。

6. Python中文件放到哪个位置读取的时候不需要给指定路径,放的位置是任意位置

python中文件一般文件放到当前目录中不需要给指定路径,

可以用os模块的getcwd()函数查看当前目录,用chdir()函数改变当前目录。

详情请看官方网站:网页链接

7. Python如何实现对象之间的数据共享

python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他脚本语言如java、R、Perl 一样,都可以直接在命令行里运行脚本程序。工具/原料
python;CMD命令行;windows操作系统
方法/步骤
1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。

2、打开文本编辑器,推荐editplus,notepad等,将文件保存成 .py格式,editplus和notepad支持识别python语法。
脚本第一行一定要写上 #!usr/bin/python
表示该脚本文件是可执行python脚本
如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录。
3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行网络。脚本写完之后,打开CMD命令行,前提是python 已经被加入到环境变量中,如果没有加入到环境变量,请网络

4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。

8. 同样的python代码通过python文件运行正常,但是直接在解释器里面逐行写的时候报语法错误,这是为什么呢

对于Python而言,存储好的脚本文件(Script file)和在Console中的交互式(interactive)命令,执行方式不同。对于脚本文件,解释器将其当作整个代码块执行,而对于交互性命令行中的每一条命令,解释器将其当作单独的代码块执行。而Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用(这句话不够严谨,后面会详谈)。所以在你给出的例子中,文件执行时(同一个代码块)会把a、b两个变量指向同一个对象;而在命令行执行时,a、b赋值语句分别被当作两个代码块执行,所以会得到两个不同的对象,因而is判断返回False。

# 如果你能理解上面一段,就不用看下面的废话了。

下面是详细的回答:
说真的,这简直是我最近在知乎遇到过的最好的问题!
这个问题远超我想象中的复杂。我本来以为我能用两分钟搞定这种每日一水的问题,结果我花了一个小时搜来搜去,读来读去,还跑去群里跟人讨论了一阵,都没能找到答案。
大概两个小时以后,我找到了相对正确的答案,把自己已经弄懂的部分强答一番,并邀请一些大神,希望能看到更为准确的回答。

这个问题的博大精深在于,能从中扯出许多小问题来,虽然这些东西很细枝末节,很trick,在日常编程中不怎么用的到,更不怎么需要额外关注,但是理解这些问题,对于我们理解Python的对象机制乃至内存处理机制有很大的帮助。

我从头开始说,大概会分以下几个部分来谈,每个部分其实都能展开很广,这次就把与问题相关的知识简单一提:
(虽然我觉得按照我寻找答案的过程讲,可能对认知更有帮助,但是理清头绪的话可能更好理解,之后会找时间为这个问题写篇文章好好记录一下)

Python中的数据类型——可变与不可变
Python中is比较与==比较的区别
Python中对小整数的缓存机制
Python程序的结构——代码块
Python的内存管理——新建对象时的操作

声明:以下所讲机制,与Python不同版本的具体实现有关(implement specific)可能不同。

Python中的数据类型
Python中的数据类型,这可能是大家入门Python的第一节课。很简单嘛,大家最常用的,int(包括long)、float、string、list、tuple、dict,加上bool和NoneType。
但是这里要重点说的,其实是可变类型和不可变类型。
不可变(immutable):Number(包括int、float),String,Tuple
可变(mutable):Dict,List,User-defined class
首先我们要记住一句话,一切皆对象。Python中把任何一种Type都当作对象来处理。其中有一些类型是不可变的,比如:

这个还是好理解的,在初始化赋值一个字符串后,我们没有办法直接修改它的值。但是数字呢?数字这种变来变去的又怎么理解。
可以看出,a的值虽然从10变成了11,但是a这个变量指向内存中的位置发生了变化,也就是说我们并没有对a指向的内存进行操作,而是对a进行了重新赋值。
再简单举一个可变的例子。

体会了可变与不可变的外在表现后,简单理解一下为什么不可变。
Python官方文档这样解释字符串不可变:

There are several advantages.
One is performance: knowing that a string is immutable means we can allocate space for it at creation time, and the storage requirements are fixed and unchanging. This is also one of the reasons for the distinction between tuples and lists.
Another advantage is that strings in Python are considered as “elemental” as numbers. No amount of activity will change the value 8 to anything else, and in Python, no amount of activity will change the string “eight” to anything else.
个人感觉,有性能上的考虑(比如对一些固定不变的元素给予固定的存储位置,整数这样操作比较方便,字符串的话涉及一些比较也会减少后续操作的时间),也有一些安全上的考虑(比如列表中的值会改变,元组不会)。这个我也不太精通,就不展开谈了。

Python中is比较与==比较的区别
前面已经提过一次,Python中一切皆对象。对象包含三个要素,id、type、value。
而Python中用于比较“相等”这一概念的操作符,is和==。
当两个变量指向了同一个对象时,is会返回True(即is比较的是两个变量的id);
当两个变量的值相同时,==会返回True(即==比较的是两个变量的value)。
示例(命令行交互模式下):
第一个和第三个示例是好理解的。
但是第二个就不那么好理解了,尤其是配合下面这个(假定我们已经知道命令行中的语句执行是单独执行两次不会相互影响,后面会具体解释):
为什么a、b分别赋值1000时is比较返回False,可以分别赋值100就会返回True?

Python中对小整数的缓存机制
Python官方文档中这么说:
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)简单来说就是,Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。

Python程序的结构——代码块&Python的内存管理——新建对象时的操作
终于要来到题主问题的部分了。
先来看最让我们困惑的,也就是题主给出的示例吧(接下来用float演示,int是同样的情况):
交互命令行下:
同样的还有:
(说好的小整数才有缓存呢(摔)!这跟你讲的不一样啊教练!)
这就很尴尬了对吧。
其实从结果论出发,我们很容易猜到结论,就像题主自己也猜了个差不多——缓存机制不同。毕竟is比较的就是对象的id,也就是对象在内存中的位置,也就是是不是同一个对象。
既然脚本文件的执行结果是True,那么,他俩就是同一个对象;既然命令行执行的结果是False,那么他俩就不是同一个对象。(这他喵的不是废话吗!)
所以我开始了漫长的找原理的过程……然而网上这方面提及的实在太少。尤其是大家的大部分讨论都是int的小整数缓存机制;就算讨论到了float,也不实际解决我们的问题。

其实我都快要放弃了,漫无目的地翻stackoverflow推荐的相关问题时终于找到了一个类似的情况,但是人家并不是比较的脚本文件和命令行执行,而是比较的函数体和赋值语句:
同样的代码,拆开就是False,放函数里就是True!是不是很像我们遇到的情况了。
根据提示我们从官方文档找到了这样的说法:

A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a mole, a function body, and a class definition. Each command typed interactively is a block. A script file (a file given as standard input to the interpreter or specified as a command line argument to the interpreter) is a code block. A script command (a command specified on the interpreter command line with the ‘-c‘ option) is a code block. The string argument passed to the built-in functions eval() and exec() is a code block.
A code block is executed in an execution frame. A frame contains some administrative information (used for debugging) and determines where and how execution continues after the code block’s execution has completed.
没错!跟我们猜的一样!这就是原理的出处了!
代码块作为一个执行单元,一个模块、一个函数体、一个类定义、一个脚本文件,都是一个代码块。
在交互式命令行中,每行代码单独视作一个代码块。

至此问题解决……了吗?视作一个代码块,就意味着要把相同value的赋值指向相同的对象吗?
在此重复一下'is' operator behaves unexpectedly with non-cached integers中提到的实验,并简单翻译结论。
通过compile()函数和dis模块的code_info()函数来检测我们执行的命令的信息。
示例:
可以看出,分别赋值a,b得到的value相等,id是不一样的。
把10.0 10.0 10.1分别赋值给a,b,c,可以看出结果中其实只保存了一个10.0,也就是a,b共用了这个数值。

也就是说,当命令行执行时,是以single的模式来compile代码(2. Built-in Functions)。它会在u_consts字典中记录对象常量。
The mode argument specifies what kind of code must be compiled; it can be 'exec' if source consists of a sequence of statements, 'eval' if it consists of a single expression, or 'single' if it consists of a single interactive statement (in the latter case, expression statements that evaluate to something other than None will be printed).而在同一代码块执行时,当增加新的常量,会先在字典中查询记录,所以相同赋值的变量会指向同一个对象而不是新建对象。

至此…问题大概是解决了。

9. python保存文件

#1.打开文件open函数
open(file,[option])
#file是要打开的文件
#option是可选择的参数,常见有modeencoding

#2.文件的打开模式
r只读模式,文件不存在时会报错。
w写入模式,文件存在会清空之前的内容,文件不存在则会新建文件。
x写入模式,文件存在会报错,文件不存在则会新建文件。
a追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。
b以二进制模式读写文件,wb,rb,ab。
+可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。

#3.文件的读取
f.read(size)#读取文件的内容,将文件的内容以字符串形式返回。
'''size是可选的数值,指定字符串长度,如果没有指定size或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时就会产生问题,反之就尽可能大的size读取和返回数据,如果到了文件末尾,会返回空字符串。
'''

f.readline()#从文件中读取单独一行。
'''字符串结尾会自动加上一个换行符 ,只有当文件最后没有以换行符结尾时,这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,如果是空行,就会描述为 ,一个只有换行符的字符串。
'''

f.readlines()#一次读取所有,返回一个列表,列表的元素为文件行的内容。
'''可以通过列表索引的方式将文件的每一行的内容输出。
可以通过for循环迭代输出每一行的信息。
'''

#4.文件的写入
f.write() #将要写入的内容以字符串的形式通过write方法写入文件中。
f.writelines()#括号里必须是由字符串元素组成的序列。

#5.保存和关闭
f.flush()
#在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。

f.close()
#关闭文件。对一个已经关闭的文件进行操作会报错。

#6.光标位置
f.tell() #返回光标在文件中的位置。
f.seek(offset,from)
#在文件中移动文件指针,从from(0代表起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节。

#7.查看文件信息
closed #查看文件是否已经关闭,返回布尔值。
mode #返回文件打开模式。
name #返回文件名。

#8.with形式打开文件,里面的语句执行完后会自动关闭文件
withopen('文件名')asf:
f.read()

10. 练习python的脚本文件存在哪儿

文件可以随便放到任何一个位置,只要能从控制台找到就可以了
可以使用相应的命令 python .....py执行脚本就可以了。希望可以帮到你,新年快乐。