A. python文件執行路徑問題
如果程序需要使用一些配置文件時,一般也是用相對路徑的,這樣也容易出問題,這時需要在啟動程序時切換到程序所在的路徑。
sys.path[0] 是程序所在的目錄,在程序開頭處加上 os.chdir(sys.path[0]) 就可以了。
如果是使用 py2exe 打包的程序,sys.path[0] 值是 路徑名\library.zip , 再處理一下這個就可以:
ddir = sys.path[0]
if os.path.isfile(ddir):
ddir,filen = os.path.split(ddir)
os.chdir(ddir)
B. python讀寫文件
讀文件
1)使用open()方法打開文件,返回一個文件對象
原型:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
舉例:f = open('test.txt', 'r')
test.txt表示文件路徑(包含文件名,這個file參數可以是絕對或者相對路徑)
r表示是讀文本文件,rb是讀二進制文本文件。(這個mode參數默認值就是r)
2)使用close()方法關閉文件
f.close()
打開後的文件必須關閉,因為文件對象會佔用系統資源,系統打開文件數量也就有限了
3)打開文件時的異常處理
f=open('test.txt', 'r')
f.read()
f.close()
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件讀寫時都有可能產生異常IOError(比如文件不存在),這樣其後面的f.read(),f.close()就不會調用。為保證無論是否異常都可以關閉文件,一般使用try ... finally來處理:
try:
f = open('test.txt', 'r')
f.read()
finally:
if f:
f.close()
但這種寫法過於繁瑣,所以Python引入了with語句來自動調用close()方法:
with open('test.txt', 'r') as f:
f.read()
4)讀文件 - read()、readline() 和 readlines()
read() 一次讀取整個文件,它通常用於將文件內容放到一個字元串變數中。如果文件過大,內存不夠,可以通過反復調用read(size)方法,每次最多讀取size個位元組的內容。
readline() 一次讀取文件中一行內容,可反復調用
readlines() 一次讀取所有內容並按行返回列表,該列表可以由for ... in ... 結構再進一步處理。
特別注意:
這三種方法是把每行末尾的'\n'也讀進來了,如有需要就得我們手動去掉'\n'
with open('test.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].rstrip('\n')
寫文件
1)寫文件和讀文件是一樣的,唯一區別是open文件時,傳入標識符不同,即'w'或者'wb'表示寫文本文件或寫二進制文件
f = open('test.txt', 'w')
f = open('test.txt', 'wb')
f = open('test.txt', 'a')
f.close()
特別注意:
1. 如果沒有這個文件,會自動創建一個新文件;如果有,就會先把原文件的內容清空再寫入;若不想清空原來的內容而是直接在後面追加新的內容,就用'a'這個模式
2. 寫文件,操作系統往往不會立刻把數據寫入磁碟,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁碟。忘記調用close()的後果是數據可能只寫了一部分到磁碟,剩下的丟失了。
2)寫文件 - write()、writelines()
write()方法和read()、readline()方法對應,是將字元串寫入到文件中。
writelines()方法和readlines()方法對應,也是針對 列表 的操作。它接收一個 字元串列表 作為參數,將他們寫入到文件中。
特別注意:
換行符不會自動的加入,需要顯式的加入換行符。
f = open('test.txt', 'w')
f.writelines(["111\n", "222\n", "333\n"])
補充說明:
1)對於非默認編碼(utf-8)的文件,需要open時添加encording參數,選擇對應的編碼方式
2)r+, w+, a+,可讀可寫
3)seek()方法,移動文件指針
seek(offset[, whence]) ,offset是相對於某個位置的偏移量。位置由whence決定,默認whence=0,從開頭起;whence=1,從當前位置算起;whence=2相對於文件末尾移動,通常offset取負值。
C. python中的「絕對路徑」和「相對路徑」如何理解
相對路徑是相對腳本文件來的。
比如腳本在C:/python目錄下,相同目錄下有一個文件叫test.txt
那麼絕對路徑就是 C:/python/test.txt,相對路徑就是test.txt
使用腳本 open('C:/python/test.txt','r') 和 open('test.txt','r')效果都是一樣的
D. python讀取文件相對路徑
比如你在和當前文件並列的"game"文件夾下有"score.txt"文件,那麼相對路徑表示為:
"game/score.txt"
就是和這個py文件並列的文件夾前面不需要加"/",後面的都需要加,別忘了加上後綴。
例:
with open("game/score.txt", mode = "a+", encoding = "utf-8") as f:
score = f.readline()
E. python中的絕對路徑和相對路徑均如何理解呢
Python中的絕對路徑和其他語言並無區別。
Python中的相對路徑則有所不同,一般語言的相對路徑的父目錄指的是文件所在目錄,而Python的相對路徑的父目錄指的是當前腳本執行目錄。舉個簡單的例子:我有一個放在/xyz/bin目錄下的腳本 test.py。那麼他的絕對路徑就是/xyz/bin,如果你在你的test腳本中使用了相對路徑的話,那麼test.py中的相對路徑是根據腳本執行時你的當前目錄所決定的。比如,如果你在/xyz/bin目錄下還有一個文件test.txt,這是test.py中所使用的文件,那麼在/xyz/bin目錄下執行./test.py是沒有問題的。但是如果你在其他目錄執行python /xyz/bin/test.py,如果其他目錄沒有test.txt文件,那麼必然會報錯。因為此時相對路徑的父目錄已經不是/xyz/bin了,自然找不到/xyz/bin/test.txt。
F. python絕對路徑和相對路徑怎麼寫
python寫絕對路徑和相對路徑的方法:
絕對路徑是指從系統盤一直到文件所在位置的路徑,例如:「D:xmtitleprojectpycnvideo.txt」
相對路徑是指相對於.py文件的路徑,例如:「pycnvideo.txt」
示例如下:
相對地址
file = open("ax.txt", 'r')
a = file.read()
print("a =", a)
file.close()
絕對地址
file2 = open("C:UserszhoubDesktop項目ax.txt", 'r')
b = file2.read()
print("b =", b)
file2.close()
執行結果如下:
想了解更多python知識,請觀看零基礎入門Python項目實戰視頻!!
G. python相對路徑怎麼寫
相對路徑
同級目錄 -----------直接調用文件名
with open(pi.txt') as file_object:
contents=file_object.read()
print(contents.rstrip())
下一級目錄 ----------- 調用程序文件以下的路徑
with open('next/pi.txt') as file_object:
contents=file_object.read()
print(contents.rstrip())
上級目錄-----------…/接文件名或路徑
with open('../pi_digits.txt') as file_object:
contents=file_object.read()
print(contents.rstrip())