當前位置:首頁 » 網頁前端 » 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執行腳本就可以了。希望可以幫到你,新年快樂。