文件描述python,文件描述符錯誤 百度雲

本文目錄一覽:

Python文件操作,看這篇就足夠!

文件的存儲方式

在計算機中,文件是以二進位的方式保存在磁碟上的文本文件和二進位文件

文本文件可以使用文本編輯軟體查看本質上還是二進位文件

二進位文件保存的內容不是給人直接閱讀的,而是提供給其她軟體使用的二進位文件不能使用文件編輯軟體查看

文件基本操作

在計算機中要操作文件一共包含三個步驟:1.打開文件2.讀、寫文件

讀 將文件內容讀入內容寫 將內存內容寫入文件

模式描述

t文本模式 (默認)。

x寫模式,新建一個文件,如果該文件已存在則會報錯。

b二進位模式。

+打開一個文件進行更新(可讀可寫)。

U通用換行模式(不推薦)。

r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。

rb以二進位格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。

r+打開一個文件用於讀寫。文件指針將會放在文件的開頭。

rb+以二進位格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。

w打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

wb以二進位格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。

w+打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

wb+以二進位格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。

a打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。

ab以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。

a+打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。

ab+以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

文件打開模式有很多,但是我們實際用到的就只有六種。

我們總結一下主要用到的是下面六種

模式可做操作若文件不存在是否覆蓋文件原來內容

r只讀報錯——

r+可讀、可寫報錯是

w只寫創建是

w+可讀、可寫創建是

a只寫創建否,追加寫

a+可讀、可寫創建否,追加寫

只讀模式打開文件——只讀(r)

文件若不存在報錯:

讀寫模式打開文件——讀寫模式(r+)

數據寫入之前:

數據寫入之後:

會替換掉相同長度的內容

文件若不存在報錯:

寫模式打開文件——寫模式(w)

數據寫入之前:

數據寫入之後:

這種操作會刪除原來的文件內容,重新寫入Python,

並且把游標放在文件最開始。

若文件不存在,系統會創建該文件夾並重新寫入內容

讀寫模式打開文件——讀寫模式(w+)

數據寫入之前:

數據寫入之後:

這種操作會刪除原來的文件內容,重新寫入Python,

並且把游標放在文件最開始。

若文件不存在,系統會創建該文件夾並重新寫入內容

利用這個原理所以文件寫模式(w)、讀寫模式(w+)還可以用作刪除文件內容。

因為他們整個工作原理就是把文件原來的內容刪除,然後寫入新的內容。

如果我們寫入的內容為空,那麼不就是刪除文件內容。

數據寫入之前:

數據寫入之後:

寫模式打開文件(追加內容)——寫模式(a)

數據寫入之前:

數據寫入之後:

可以看到是在原先內容的基礎上在文末追加新的內容!

若文件不存在,系統會創建新的文件夾並寫入內容

讀寫模式打開文件(追加內容)——讀寫模式(a)

數據寫入之前:

數據寫入之後:

可以看到是在原先內容的基礎上在文末追加新的內容!

若文件不存在,系統會創建新的文件夾並寫入內容

二進位模式打開文件

我們看到了在文件打開模式中有以下模式:rb、wb……有這種帶 b 的。

什麼意思呢?

就是用二進位的方式打開文件。

很明顯,我們出現了以下錯誤:

主要原因是因為編碼的問題,可能是因為0x82這個位元組在gbk編碼中沒有這個字元,

可能原字元是兩個位元組,在gbk里被解析成了一個位元組,導致字元不存在。

這就是我們文件打開方式需要使用二進位讀取的原因。

文件操作

open 函數負責打開文件,並且返迴文件對象

read /write / close 三個方法都需要通過文件對象 來調用

文件和文件夾的操作

在Python中⽂件和⽂件夾的操作要藉助os模塊⾥⾯的相關功能,

具體步驟如下:

導⼊os模塊

使⽤ os 模塊相關功能

1、文件重命名

2、刪除文件

3、創建文件夾

4、刪除文件夾

5、獲取當前目錄

6、改變默認目錄

7、獲取目錄列表

簡述創建python文件的過程?

首先,進行打開的pycharm軟體界面當中,進行選中已經打開的項目文件。

請點擊輸入圖片描述

然後進行點擊菜單中的「file」的選項菜單。

請點擊輸入圖片描述

進行點擊了file的菜單之後,進行點擊下拉菜單中的「new」的選項。

請點擊輸入圖片描述

這樣就會彈出了一個窗口,進行點擊「Python額 file」的選項。

請點擊輸入圖片描述

這樣就會彈出了一個new Python file的窗口中,進行輸入文件名稱。

請點擊輸入圖片描述

文件名稱輸入完成之後,進行點擊「ok」即可。

請點擊輸入圖片描述

可以看到的是在當前的python的文件創建成功了。

請點擊輸入圖片描述

python 基礎教程

運算

a = 21

b = 10

c = 0

c = a + b

print “1 – c 的值為:”, c

c = a – b

print “2 – c 的值為:”, c

c = a * b

print “3 – c 的值為:”, c

c = a / b

print “4 – c 的值為:”, c

c = a % b

print “5 – c 的值為:”, c

a = 2

b = 3

c = a**b

print “6 – c 的值為:”, c

a = 10

b = 5

c = a//b

print “7 – c 的值為:”, c

python比較

a = 21

b = 10

c = 0

if ( a == b ):

print “1 – a 等於 b”

else:

print “1 – a 不等於 b”

if ( a != b ):

print “2 – a 不等於 b”

else:

print “2 – a 等於 b”

if ( a b ):

print “3 – a 不等於 b”

else:

print “3 – a 等於 b”

if ( a b ):

print “4 – a 小於 b”

else:

print “4 – a 大於等於 b”

if ( a b ):

print “5 – a 大於 b”

else:

print “5 – a 小於等於 b”

a = 5

b = 20

if ( a = b ):

print “6 – a 小於等於 b”

else:

print “6 – a 大於 b”

if ( b = a ):

print “7 – b 大於等於 a”

else:

print “7 – b 小於 a”

賦值

a = 21

b = 10

c = 0

c = a + b

print “1 – c 的值為:”, c

c += a

print “2 – c 的值為:”, c

c *= a

print “3 – c 的值為:”, c

c /= a

print “4 – c 的值為:”, c

c = 2

c %= a

print “5 – c 的值為:”, c

c **= a

print “6 – c 的值為:”, c

c //= a

print “7 – c 的值為:”, c

邏輯運算符:

a = 10

b = 20

if ( a and b ):

print “1 – 變數 a 和 b 都為 true”

else:

print “1 – 變數 a 和 b 有一個不為 true”

if ( a or b ):

print “2 – 變數 a 和 b 都為 true,或其中一個變數為 true”

else:

print “2 – 變數 a 和 b 都不為 true”

a = 0

if ( a and b ):

print “3 – 變數 a 和 b 都為 true”

else:

print “3 – 變數 a 和 b 有一個不為 true”

if ( a or b ):

print “4 – 變數 a 和 b 都為 true,或其中一個變數為 true”

else:

print “4 – 變數 a 和 b 都不為 true”

if not( a and b ):

print “5 – 變數 a 和 b 都為 false,或其中一個變數為 false”

else:

print “5 – 變數 a 和 b 都為 true”

in,not in

a = 10

b = 20

list = [1, 2, 3, 4, 5 ];

if ( a in list ):

print “1 – 變數 a 在給定的列表中 list 中”

else:

print “1 – 變數 a 不在給定的列表中 list 中”

if ( b not in list ):

print “2 – 變數 b 不在給定的列表中 list 中”

else:

print “2 – 變數 b 在給定的列表中 list 中”

a = 2

if ( a in list ):

print “3 – 變數 a 在給定的列表中 list 中”

else:

print “3 – 變數 a 不在給定的列表中 list 中”

條件

flag = False

name = ‘luren’

if name == ‘python’: # 判斷變數否為’python’

flag = True # 條件成立時設置標誌為真

print ‘welcome boss’ # 並輸出歡迎信息

else:

print name

num = 5

if num == 3: # 判斷num的值

print ‘boss’

elif num == 2:

print ‘user’

elif num == 1:

print ‘worker’

elif num 0: # 值小於零時輸出

print ‘error’

else:

print ‘roadman’ # 條件均不成立時輸出

循環語句:

count = 0

while (count 9):

print ‘The count is:’, count

count = count + 1

print “Good bye!”

i = 1

while i 10:

i += 1

if i%2 0: # 非雙數時跳過輸出

continue

print i # 輸出雙數2、4、6、8、10

i = 1

while 1: # 循環條件為1必定成立

print i # 輸出1~10

i += 1

if i 10: # 當i大於10時跳出循環

break

for letter in ‘Python’: # 第一個實例

print ‘當前字母 :’, letter

fruits = [‘banana’, ‘apple’, ‘mango’]

for fruit in fruits: # 第二個實例

print ‘當前水果 :’, fruit

print “Good bye!”

獲取用戶輸入:raw_input

var = 1

while var == 1 : # 該條件永遠為true,循環將無限執行下去

num = raw_input(“Enter a number :”)

print “You entered: “, num

print “Good bye!”

range,len

fruits = [‘banana’, ‘apple’, ‘mango’]

for index in range(len(fruits)):

print ‘當前水果 :’, fruits[index]

print “Good bye!”

python數學函數:

abs,cell,cmp,exp,fabs,floor,log,log10,max,min,mod,pow,round,sqrt

randrange

訪問字元串的值

var1 = ‘Hello World!’

var2 = “Python Runoob”

print “var1[0]: “, var1[0]

print “var2[1:5]: “, var2[1:5]

轉義字元

格式化輸出

print “My name is %s and weight is %d kg!” % (‘Zara’, 21)

字元串函數:

添加元素

list = [] ## 空列表

list.append(‘Google’) ## 使用 append() 添加元素

list.append(‘Runoob’)

print list

刪除元素

list1 = [‘physics’, ‘chemistry’, 1997, 2000]

print list1

del list1[2]

print “After deleting value at index 2 : “

print list1

列表操作

列表方法

刪除字典

dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’};

del dict[‘Name’]; # 刪除鍵是’Name’的條目

dict.clear(); # 清空詞典所有條目

del dict ; # 刪除詞典

print “dict[‘Age’]: “, dict[‘Age’];

print “dict[‘School’]: “, dict[‘School’];

字典的函數:

當前時間戳:

import time

time.time()

格式化日期輸出

import time

print time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime())

print time.strftime(“%a %b %d %H:%M:%S %Y”, time.localtime())

a = “Sat Mar 28 22:24:24 2016”

print time.mktime(time.strptime(a,”%a %b %d %H:%M:%S %Y”))

獲取某個月日曆:calendar

import calendar

cal = calendar.month(2016, 1)

print “以下輸出2016年1月份的日曆:”

print cal

當前日期和時間

import datetime

i = datetime.datetime.now()

print (“當前的日期和時間是 %s” % i)

print (“ISO格式的日期和時間是 %s” % i.isoformat() )

print (“當前的年份是 %s” %i.year)

print (“當前的月份是 %s” %i.month)

print (“當前的日期是 %s” %i.day)

print (“dd/mm/yyyy 格式是 %s/%s/%s” % (i.day, i.month, i.year) )

print (“當前小時是 %s” %i.hour)

print (“當前分鐘是 %s” %i.minute)

print (“當前秒是 %s” %i.second)

不定長參數:*

lambda:匿名函數

def….

python模塊搜索路徑

獲取用戶輸入

str = raw_input(“請輸入:”)

print “你輸入的內容是: “, str

input可以接收表達式

open參數

write要自己添加換行符

讀取10個字元

重命名:os.rename

os.remove

os.mkdir os.chdir

os.getcwd

os.rmdir

open參數

file的方法

異常:

try:

fh = open(“testfile”, “w”)

fh.write(“這是一個測試文件,用於測試異常!!”)

except IOError:

print “Error: 沒有找到文件或讀取文件失敗”

else:

print “內容寫入文件成功”

fh.close()

try:

fh = open(“testfile”, “w”)

fh.write(“這是一個測試文件,用於測試異常!!”)

finally:

print “Error: 沒有找到文件或讀取文件失敗”

用戶自定義異常:

os 模塊提供了非常豐富的方法用來處理文件和目錄。常用的方法如下表所示:

| 序號 | 方法及描述 |

| 1 |

os.access(path, mode)

檢驗許可權模式 |

| 2 |

os.chdir(path)

改變當前工作目錄 |

| 3 |

os.chflags(path, flags)

設置路徑的標記為數字標記。 |

| 4 |

os.chmod(path, mode)

更改許可權 |

| 5 |

os.chown(path, uid, gid)

更改文件所有者 |

| 6 |

os.chroot(path)

改變當前進程的根目錄 |

| 7 |

os.close(fd)

關閉文件描述符 fd |

| 8 |

os.closerange(fd_low, fd_high)

關閉所有文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯誤會忽略 |

| 9 |

os.dup(fd)

複製文件描述符 fd |

| 10 |

os.dup2(fd, fd2)

將一個文件描述符 fd 複製到另一個 fd2 |

| 11 |

os.fchdir(fd)

通過文件描述符改變當前工作目錄 |

| 12 |

os.fchmod(fd, mode)

改變一個文件的訪問許可權,該文件由參數fd指定,參數mode是Unix下的文件訪問許可權。 |

| 13 |

os.fchown(fd, uid, gid)

修改一個文件的所有權,這個函數修改一個文件的用戶ID和用戶組ID,該文件由文件描述符fd指定。 |

| 14 |

os.fdatasync(fd)

強制將文件寫入磁碟,該文件由文件描述符fd指定,但是不強制更新文件的狀態信息。 |

| 15 |

os.fdopen(fd[, mode[, bufsize]])

通過文件描述符 fd 創建一個文件對象,並返回這個文件對象 |

| 16 |

os.fpathconf(fd, name)

返回一個打開的文件的系統配置信息。name為檢索的系統配置的值,它也許是一個定義系統值的字元串,這些名字在很多標準中指定(POSIX.1, Unix 95, Unix 98, 和其它)。 |

| 17 |

os.fstat(fd)

返迴文件描述符fd的狀態,像stat()。 |

| 18 |

os.fstatvfs(fd)

返回包含文件描述符fd的文件的文件系統的信息,像 statvfs() |

| 19 |

os.fsync(fd)

強制將文件描述符為fd的文件寫入硬碟。 |

| 20 |

os.ftruncate(fd, length)

裁剪文件描述符fd對應的文件, 所以它最大不能超過文件大小。 |

| 21 |

os.getcwd()

返回當前工作目錄 |

| 22 |

os.getcwdu()

返回一個當前工作目錄的Unicode對象 |

| 23 |

os.isatty(fd)

如果文件描述符fd是打開的,同時與tty(-like)設備相連,則返回true, 否則False。 |

| 24 |

os.lchflags(path, flags)

設置路徑的標記為數字標記,類似 chflags(),但是沒有軟鏈接 |

| 25 |

os.lchmod(path, mode)

修改連接文件許可權 |

| 26 |

os.lchown(path, uid, gid)

更改文件所有者,類似 chown,但是不追蹤鏈接。 |

| 27 |

os.link(src, dst)

創建硬鏈接,名為參數 dst,指向參數 src |

| 28 |

os.listdir(path)

返回path指定的文件夾包含的文件或文件夾的名字的列表。 |

| 29 |

os.lseek(fd, pos, how)

設置文件描述符 fd當前位置為pos, how方式修改: SEEK_SET 或者 0 設置從文件開始的計算的pos; SEEK_CUR或者 1 則從當前位置計算; os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效 |

| 30 |

os.lstat(path)

像stat(),但是沒有軟鏈接 |

| 31 |

os.major(device)

從原始的設備號中提取設備major號碼 (使用stat中的st_dev或者st_rdev field)。 |

| 32 |

os.makedev(major, minor)

以major和minor設備號組成一個原始設備號 |

| 33 |

os.makedirs(path[, mode])

遞歸文件夾創建函數。像mkdir(), 但創建的所有intermediate-level文件夾需要包含子文件夾。 |

| 34 |

os.minor(device)

從原始的設備號中提取設備minor號碼 (使用stat中的st_dev或者st_rdev field )。 |

| 35 |

os.mkdir(path[, mode])

以數字mode的mode創建一個名為path的文件夾.默認的 mode 是 0777 (八進位)。 |

| 36 |

os.mkfifo(path[, mode])

創建命名管道,mode 為數字,默認為 0666 (八進位) |

| 37 |

os.mknod(filename[, mode=0600, device])

創建一個名為filename文件系統節點(文件,設備特別文件或者命名pipe)。

|

| 38 |

os.open(file, flags[, mode])

打開一個文件,並且設置需要的打開選項,mode參數是可選的 |

| 39 |

os.openpty()

打開一個新的偽終端對。返回 pty 和 tty的文件描述符。 |

| 40 |

os.pathconf(path, name)

返回相關文件的系統配置信息。 |

| 41 |

os.pipe()

創建一個管道. 返回一對文件描述符(r, w) 分別為讀和寫 |

| 42 |

os.popen(command[, mode[, bufsize]])

從一個 command 打開一個管道 |

| 43 |

os.read(fd, n)

從文件描述符 fd 中讀取最多 n 個位元組,返回包含讀取位元組的字元串,文件描述符 fd對應文件已達到結尾, 返回一個空字元串。 |

| 44 |

os.readlink(path)

返回軟鏈接所指向的文件 |

| 45 |

os.remove(path)

刪除路徑為path的文件。如果path 是一個文件夾,將拋出OSError; 查看下面的rmdir()刪除一個 directory。 |

| 46 |

os.removedirs(path)

遞歸刪除目錄。 |

| 47 |

os.rename(src, dst)

重命名文件或目錄,從 src 到 dst |

| 48 |

os.renames(old, new)

遞歸地對目錄進行更名,也可以對文件進行更名。 |

| 49 |

os.rmdir(path)

刪除path指定的空目錄,如果目錄非空,則拋出一個OSError異常。 |

| 50 |

os.stat(path)

獲取path指定的路徑的信息,功能等同於C API中的stat()系統調用。 |

| 51 |

os.stat_float_times([newvalue])

決定stat_result是否以float對象顯示時間戳

|

| 52 |

os.statvfs(path)

獲取指定路徑的文件系統統計信息 |

| 53 |

os.symlink(src, dst)

創建一個軟鏈接 |

| 54 |

os.tcgetpgrp(fd)

返回與終端fd(一個由os.open()返回的打開的文件描述符)關聯的進程組 |

| 55 |

os.tcsetpgrp(fd, pg)

設置與終端fd(一個由os.open()返回的打開的文件描述符)關聯的進程組為pg。 |

| 56 |

os.tempnam([dir[, prefix]])

返回唯一的路徑名用於創建臨時文件。 |

| 57 |

os.tmpfile()

返回一個打開的模式為(w+b)的文件對象 .這文件對象沒有文件夾入口,沒有文件描述符,將會自動刪除。 |

| 58 |

os.tmpnam()

為創建一個臨時文件返回一個唯一的路徑 |

| 59 |

os.ttyname(fd)

返回一個字元串,它表示與文件描述符fd 關聯的終端設備。如果fd 沒有與終端設備關聯,則引發一個異常。 |

| 60 |

os.unlink(path)

刪除文件路徑 |

| 61 |

os.utime(path, times)

返回指定的path文件的訪問和修改的時間。 |

| 62 |

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

輸出在文件夾中的文件名通過在樹中遊走,向上或者向下。 |

| 63 |

os.write(fd, str)

寫入字元串到文件描述符 fd中. 返回實際寫入的字元串長度 |

Python 文件操作

open(filename[,mode,encoding=”編碼”]) :第一個參數文件名如果不加路徑,默認在該py文件目錄下(路徑舉例: E:/XXX或E:\\xxx ),第二個是模式,默認為 ‘r’ ——只讀,舉例: f = open(‘E:/abc.txt’) ,如果要轉編碼並寫入模式:

f = open(‘E:/abc.txt’,’w’,encoding=’utf-8′)

1. 模式

2. 方法

(1) close() : 關閉文件,因為文件寫入時是寫在內存,只有關閉時才寫入硬碟,所以寫完記得關閉

(2) read(size = -1) :讀取文件size個字元,不寫默認是-1,此時讀取所有內容(換行按\n來表示,很不好看),並作為字元串返回,一定要注意 讀完以後文件指針將會指向末尾 ,所以下一次在用read方法時會發現讀取不出內容了,所以這個就要用seek移動指針或者關閉文件重新定義

(3) tell() :返回當前文件指針指向的位置

(4) seek(offset,from) :移動文件指針,代表從from參數開始偏移offset個位元組,0代表起始位置,1代表當前位置,2代表文件末尾

(5) readline() :按序列讀取一行內容,默認\n為邊界

(6) write() :寫入內容,但必須要有寫入許可權才行,否則報錯,寫完會返回寫入的長度,例如: len1 = f.write(‘abc’) ,此時len1就為3

(7) truncate() :刪除內容,把當前指針以後的內容全刪了,舉例:

註:

1.文件還可以轉化為 list 之類的,例如: list1 = list(f) ,此時文件內容的按\n被隔開,然後可以用for語句讀取文件所有內容,舉例:

2.上面輸出文件內容方法相對低效,所以一般都直接用for輸出整個文件,舉例:

通過 fileno 函數,我們可以查看一個文件對應的文件描述符,對應的是程序中打開的文件序號,舉例:

可以看出python在啟動時會先啟動標準流的文件(文件描述符分別為:0/1/2),所以之後打開的文件就從3開始遞增,當釋放一個文件資源時,該描述符序號被釋放,之後打開的文件可以繼續使用該序號的文件描述符

python中的 print 的本質是通過 sys.stdout 來進行內容輸出,而 sys.stdout 的本質是一個”文件”,相當於我們所有的輸入輸出的本質都是在對 sys.stdin / sys.stdout / sys.stderr 這些文件來進行讀寫操作,舉例:

open 函數不僅可以打開本地文件,也可以打開文件描述符,而該參數默認為 True ,代表 close 後會將對應的文件資源釋放,而對於一些文件描述符,我們只是希望 close 時將打開文件描述符的對象釋放,而不釋放對應的文件資源,那麼則可以設置 closefd=False ,舉例:

需要使用到 chardet 模塊,按二進位可讀打開文件,然後通過 detect() 方法查看,舉例:

所以就可以根據文件來設置編碼了:

有時候使用文件的編碼解碼也可能會出現無法解析的情況,例如兩種編碼混在同一個文件里的時候,此時可以設置 errors 參數為 ignore 來避免該問題,示例:

可用 os 模塊下的 chmod() 函數,具體參考:

使用 os 模塊下的 remove() 函數可以實現刪除文件,舉例:

可以使用自帶的 zipfile 模塊來進行操作,舉例:

可以使用自帶的 tarfile 模塊來進行操作,舉例:

python 如何在進程間傳遞文件描述符?

libancillary可以做到這點(其實也是socket):

不過它是C代碼所以你需要些binding,比如ctypes:

我想你都問的這麼深了就不用我寫示範了吧。

Python3 輸入輸出和File(文件) 方法

Python兩種輸出值的方式: 表達式語句和 print() 函數。第三種方式是使用文件對象的 write() 方法,標準輸出文件可以用 sys.stdout 引用。

如果你希望輸出的形式更加多樣,可以使用 str.format() 函數來格式化輸出值。如果你希望將輸出的值轉成字元串,可以使用 repr() 或 str() 函數來實現。

str(): 函數返回一個用戶易讀的表達形式。

repr(): 產生一個解釋器易讀的表達形式。

str.format() 的使用

讀取鍵盤輸入

Python 提供了 input() 內置函數,從標準輸入讀入一行文本,默認的標準輸入是鍵盤。

open() 用於打開一個文件,並返迴文件對象,基本語法格式如下:

open(filename, mode=’r’)

完整的語法格式為:

open(filename, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

參數說明:

filename: 必需,文件路徑+文件名稱(相對或者絕對路徑)

mode: 可選,文件打開模式:只讀,寫入,追加等,默認模式為只讀(r)

buffering: 設置緩衝

encoding: 一般使用utf8

errors: 報錯級別

newline: 區分換行符

closefd: 傳入的file參數類型

opener: 設置自定義開啟器,開啟器的返回值必須是一個打開的文件描述符。

不同模式mode打開文件的說明:

t 文本模式 (默認的模式)

b 二進位模式,一般用於非文本文件如圖片等

x 寫模式,新建一個文件,如果該文件已存在則會報錯

+ 打開一個文件進行更新(可讀可寫)

r 以只讀方式打開文件。文件的指針將會放在文件的開頭。是默認模式。

rb 以二進位格式打開一個文件用於只讀。文件指針將會放在文件的開頭。

r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。

rb+ 以二進位格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。

w 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

wb 以二進位格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

w+ 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

wb+ 以二進位格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。

a 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。

ab 以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。

a+ 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。

ab+ 以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

f.write(string) 將 string 寫入到文件中, 然後返回寫入的字元數

f.writelines(sequence) 向文件寫入一個序列字元串列表,如果需要換行則要自己加入每行的換行符。

f.read(size) 讀取一定數目的數據, 然後作為字元串或位元組對象返回。size 是一個可選參數。當 size 參數忽略或者為負, 那麼該文件的所有內容都將被讀取並且返回。

f.readline() 從文件中讀取單獨的一行。換行符為 ‘\n’。讀取整行,包括 “\n” 字元。f.readline() 如果返回一個空字元串, 說明已經讀取到最後一行。

f.readlines([sizeint])] 讀取所有行並返回列表類型,若給定sizeint0,返回總和大約為sizeint位元組的行, 並且將這些位元組按行分割。實際讀取值可能比 sizeint 較大, 因為需要填充緩衝區。

f.tell() 返迴文件對象當前所處的位置, 它是從文件開頭開始算起的位元組數。

f.seek() 移動文件讀取指針到指定位置,如果要改變文件當前的位置, 可以使用f.seek(offset, from_what) 函數。from_what 的值(默認為0), 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:

seek(x,0) : 從起始位置即文件首行首字元開始移動 x 個字元

seek(x,1) : 表示從當前位置往後移動x個字元

seek(-x,2):表示從文件的結尾往前移動x個字元

file.flush() 刷新文件內部緩衝,直接把內部緩衝區的數據立刻寫入文件, 而不是被動的等待輸出緩衝區寫入

file.fileno() 返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上

file.isatty() 如果文件連接到一個終端設備返回 True,否則返回 False

file.truncate([size]) 從文件的首行首字元開始截斷,截斷文件為 size 個字元,無 size 表示從當前位置截斷;截斷之後後面的所有字元被刪除,其中 windows 系統下的換行代表2個字元大小。

f.close() 關閉文件並釋放系統的資源。關閉後文件不能再進行讀寫操作,否則會拋出異常

當處理一個文件對象時, 使用 with 關鍵字是非常好的方式。在結束後, 它會幫你正確的關閉文件。 而且寫起來也比 try – finally 語句塊要簡短:

python的pickle模塊實現了基本的數據序列和反序列化。通過pickle模塊的序列化操作能夠將程序中運行的對象信息保存到文件中去,永久存儲。通過pickle模塊的反序列化操作能夠從文件中創建上一次程序保存的對象。

基本介面:

pickle.dump(obj, file, [,protocol])

有了 pickle 對象, 就能對 file 以讀取的形式打開:

x = pickle.load(file)

從 file 中讀取一個字元串,並將它重構為原來的python對象。

示例:使用pickle模塊將數據對象保存到文件

示例:使用pickle模塊從文件中重構python對象

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252951.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 02:15
下一篇 2024-12-14 02:15

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論