包含python文件對象的訪問模式的詞條

本文目錄一覽:

io.UnsupportedOperation: not readable python編程中老是這情況,,新人求解救

io.UnsupportedOperation: not readable python編程中老是這情況,是因為這個代碼中有兩處錯誤:

1、你是用open打開一個文件,此時調用的是w寫入模式,下面使用read是沒有許可權的。

2、使用write寫入一個字元s,但是此時並沒有真正的寫入,而是還存在與內存中。此時執行read讀取的為空字元。需要先執行a.close()關閉文件,再使用a=open(“D://2.txt”),最後再用a.read()打開文件讀入。

修改後的代碼:

擴展資料:

這個參數的具體說明如下:

1、name : 一個包含了你要訪問的文件名稱的字元串值。

2、mode : mode 決定了打開文件的模式:只讀,寫入,追加等。

3、buffering : 如果 buffering 的值被設為 0,就不會有寄存。如果 buffering 的值取 1,訪問文件時會寄存行。如果將 buffering 的值設為大於 1 的整數,表明了這就是的寄存區的緩衝大小。

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中怎麼輸入輸出文件

1.打開和關閉文件(open(),file(),close())

有兩種內建函數可以獲取文件對象:open和file。他們的用法完全一樣。下面只以open()為例子講解。獲取一個文件對象(打開文件)的語法如下:

複製代碼 代碼如下:fileObj = open(filename,access_mode=’r’,buffering=-1)

filename不用說你也應該知道是你要打開文件的路徑。

access_mode用來標識文件打開的模式,默認為r(只讀)。

常用的模式如下表所示:

文件模式 解釋

r 以只讀方式打開

w 以寫方式打開,文件不為空時清空文件;文件不存在時新建文件。

a 追加模式,沒有則創建

r+,w+,a+ 以讀寫模式打開,參見w,a

另外還有一個b表示二進位模式訪問,但是對於Linux或者unix系統來說這個模式沒有任何意義,因為他們把所有文件都看作二進位文件,包括文本文件。

第三個參數不經常用到,標識訪問文件的緩衝方式,0代表不緩衝,1代表緩

沖一行,-1代表使用系統默認緩衝方式。只要使用系統默認就好。

一些例子:

複製代碼 代碼如下:

f = open(‘/etc/passwd’,’r’)

f1 = open(‘/etc/test’,’w’)

使用完文件後,一定要記得關閉文件,操作如下:

複製代碼 代碼如下:

f.close()

2.文件讀入

2.1.file.read(size = -1)

讀取從當前文件游標起size個位元組的文件內容。如果size=-1,則讀取所有剩餘位元組。

複製代碼 代碼如下:

f = open(‘/etc/passwd’)

f.read(100)

‘root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol’

2.2.file.readlines(size=-1)

從文件中讀取並返回一行(包括行結束符),或返回最大size個字元

複製代碼 代碼如下:

f.readline()

‘ogin\n’#和上面一個例子輸出的最後拼起來就是 ‘nologin’,因為游標在l後面。

f.readline(1)

‘a’

2.3.file.readlines(sizhint=0)

讀取文件所有的行,並作為一個列表返回(包括行結束符),如果sizhint0則返回總和大約sizhint位元組的行(具體由緩衝區大小決定)。

複製代碼 代碼如下:

f.readlines()

[‘dm:x:3:4:adm:/var/adm:/sbin/nologin\n’, ‘lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n’, ‘sync:x:5:0:sync:/sbin:/bin/sync\n’, ‘shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n’, ‘halt:x:7:0:halt:/sbin:/sbin/halt\n’, ‘mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n’, ……

輸出省略。

3.文件輸出

3.1.file.write(str)

向文件中寫入指定的字元串。

複製代碼 代碼如下:

f = file(‘/root/test.py’,’w+’)

f.write(“print ‘hello,world'”)

f.read()

f.close()

file(‘/root/test.py’,’r’).read()

“print ‘hello,world'”

3.2.file.write(seq)

向文件寫入字元串序列seq。seq是任何返回字元串的可迭代對象。

複製代碼 代碼如下:

f = file(‘/root/test.py’,’a+’)

codelst = [‘\n’,’import os\n’,”os.popen(‘ls’).read()\n”]

f.writelines(codelst)

f.close()

file(‘/root/test.py’,’r’).read()

“print ‘hello,world’\nimport os\nos.popen(‘ls’).read()\n”

注意,文件寫入的時候,不會自動加上換行符,必須手動加上。

如何用Python打開指定的某個文件夾?比如我要用Python打開D盤裡的一個普通文件,該怎麼做?

操作系統一般不允許程序直接操作磁碟文件的,文件在磁碟上的讀寫都是由操作系統提供的,文件操作包括創建、刪除、修改許可權、讀取、寫入等。要想實現對文件的操作就需要請求操作系統打開一個文件對象,然後通過操作系統提供的介面來實現對文件讀寫的相關操作。讀寫文件是最常見的 I/O 操作,Python內置相關API可以幫助我們快速的實現文件讀寫操作。

文件對象

Python內置的 open() 函數可以用於打開指定文件 ,該函數會返回一個文件對象(該對象包含了當前文件擁有的屬性信息,相當於文件句柄)。參數file為要創建或打開文件的文件名稱,參數mode用於指定文件的打開模式(可選),參數buffering用於指定對文件做讀寫操作時是否使用緩衝區。在打開文件之後就可調用文件對象的屬性和方法,完成對文件的讀/寫操作之後最後需要關閉該文件,通過文件對象的close() 函數來實現即可。

打開模式

文件打開是可以指定其打開的模式,該參數通過mode來指定【默認模式為只讀(r)】。選擇不同的打開模式決定了後續可以對文件進行操作,如果使用 r 模式打開的文件則只能讀取文件而無法修改文件內容。open()提供了多種打開模式,下面列出了對應的打開模式和說明:

python的編寫格式

讀取鍵盤輸入【raw_input( )或者input( )】

demo = raw_input(‘INPUT:’); \ # \是在CMD中的換行符

… print “content is” , demo

INPUT:HELL0 MOMO

content is HELL0 MOMO

打開或關閉文件,這裡要用Python的內置函數open( ),然後創建一個file對象。

Python打開文件的模式:

r 以只讀模式打開文件。

w 以只寫模式打開文件,且先把文件內容清空(truncate the file first)wb 以二進位格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。

a 以添加模式打開文件,寫文件的時候總是寫到文件末尾,用seek也無用。打開的文件也是不能讀的。

r+ 以讀寫方式打開文件,文件可讀可寫,可寫到文件的任何位置。

w+ 和r+不同的是,它會truncate the file first。

a+ 和r+不同的是,它只能寫到文件末尾。

一個文件被打開後,有一個file對象,可以得到有關該文件的各種信息,以下是一些使用方法:

file.closed 返回true如果文件已被關閉,否則返回false。

file.mode 返回被打開文件的訪問模式。

file.name 返迴文件的名稱。

file.softspace 如果用print輸出後,必須跟一個空格符,則返回false。否則返回true。

舉個例子

demo = open(“MOMO.txt”,”wb”)

print u’是否關閉:’, demo.closed

是否關閉:False

print u’訪問模式:’,demo.mode

訪問模式: wb

print u’文件名稱:’,demo.name

文件名稱:MOMO.txt

print u’末尾是否加空格:’,demo.softspace

末尾是否加空格:0

Python其實很簡單 第十五章 文件操作

在各種變數中保存的數據都是臨時的,隨著程序運行結束都會丟失。要做到數據長期有效,必須建立在磁碟中建立文件,將數據輸入到文件中並保存。需要獲取數據時需要打開文件讀取。

而我們自己建立的程序都是應用程序,從本質上講,應用程序是無法直接操作計算機的硬體的,譬如讀寫磁碟中文件,這就需要調用操作系統中的相應命令。接下來我們使用的Python內置函數open()、write()都是通過調用操作系統的相關命令才實現文件讀寫的,至於其中的細節,我們就不需要考慮了。

15.1創建和打開文件

在Python 中創建或打開文件,實際上是建立一個對象,該對象通過調用內置的open()函數創建或打開一個文件。

語法:

file object = open(filename [, mode][, buffering])

參數說明如下:

filename:file_name變數是一個包含了你要訪問的文件名稱的字元串值;

mode:mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式為只讀(r)。

Buffering:如果buffering的值被設為0,就不會有寄存;如果buffering的值取1,訪問文件時會寄存行;如果將buffering的值設為大於1的整數,表明了這就是的寄存區的緩衝大小;如果取負值,寄存區的緩衝大小則為系統默認。

mode參數的參數值及說明

對於其中最難區別的r、r+、w、w+、a、a+幾個參數的區別總結如下,要特別注意指針的位置:

下面舉例說明open( )函數的使用方法。

例1:

file=open(‘1.py’)

如果文件「1.py」存在,則可以打開此文件;如果文件「1.py」不存在,則會出現如下提示:

Traceback (most recent call last):

File ” “, line 1, in

file=open(‘1.py’)

FileNotFoundError: [Errno 2] No such file or directory: ‘1.py’

例2:

file=open(‘4.py’,』a+』)

雖然文件「4.py」不存在,但運行並未出現錯誤,參見上表,「a+」的含義是以讀寫模式打開文件,如果該文件已經存在,新內容將以追加方式寫入;如果該文件不存在,則新建文件用於寫入。查看文件夾,發現已經生成了一個新的文件4.py。

例3:

file=open(‘python.png’,’rb’)

print(file)

運行結果:

這就是說,雖然Python可以打開一個圖片格式的文件,但print()並不能將其輸出,還需要第三方庫中模塊的相應方法去處理,如PIL中的open()f方法。

例4:

file = open(“f.txt”, “w”,encoding=’utf-8′)

# 以只寫模式打開文件f.txt,編碼方式為utf-8

print( “文件名: “, file.name) # 輸出文件名

print( “是否已關閉 : “, file.closed) # 文件是否打開

print( “訪問模式 : “, file.mode) # 文件訪問模式

運行結果:

文件名: f.txt

是否已關閉 : False

訪問模式 : w

例5:

15.2關閉文件

打開文件使用後要及時關閉,以免造成不必要的破壞,同時也可以釋放內存。在Python中使用close()方法可以關閉文件。

語法格式:

file.close()

其中,file為文件對象。

15.3 with語句

with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的「清理」操作,釋放資源,比如文件使用後自動關閉、線程中鎖的自動獲取和釋放等。

with語句的語法格式如下:

with expression as target:

with-body

其中,expression用於指定一個表達式,譬如打開文件的open()函數。target用於指定一個變數,並且將expression的結果保存到該變數中,譬如文件對象file。with-body用於指定with語句體,譬如一些文件操作的相關語句,如果沒有要執行的語句體,則直接用pass語句代替。

假設python當前目錄下存在一個test.txt文件,其內容如下:

Python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

Python是互動式語言: 這意味著,您可以在一個 Python 提示符 後直接執行代碼。

Python是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。

Python是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

舉例如下:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

line=file.readline() # readline()方法可以讀取文件一行數據,接下來就會講到。

print(line)

運行結果如下:

Python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

而此時,我們給該段代碼with語句之外再增加一個讀取文件的語句,代碼如下:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

line=file.readline()

print(line)

line2=file.readline()

print(line2)

發現出現了如下錯誤提示:

Traceback (most recent call last):

File “C:/Users/zym/AppData/Local/Programs/Python/Python39/3.py”, line 5, in

line2=file.readline()

ValueError: I/O operation on closed file.

意思是要讀取的文件已經被關閉了。

由此可知,當with語句運行結束後,被打開的test.txt文件就自動關閉了。

15.4讀取文件

在Python 中讀取文件的方法有:

1、讀取指定個數的字元

格式如下:

File.read([size])

其中,file為打開的文件對象。size為可選參數,可以指定要讀取的字元個數,省缺表示讀取所有內容。

在調用read()方法讀取文件內容時,文件必須是以r(只讀)或者r+(讀寫)方式打開。

如:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

txt=file.read() (或txt=file.read(10))

print(txt)

將讀取、輸出test.txt文件的全部內容(或前10個字元)。

2、移動文件的指針

對於剛打開的文件,文件指針總是指向文件頭的。也可以通過seek()方法將文件的指針移動到新的位置。

格式如下:

file.seek(offset[,whence])

其中,file表示已經打開的文件對象;offset用於指定移動的字元個數;whence表示從哪個位置起始計算個數,其值為0表示從文件頭開始計算,其值為1表示從當前位置開始計算,其值為2表示從文件尾開始計算,默認值為0。

例如:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

string=file.read(9)

print(‘取9個字元: ‘+string)

file.seek(2) #指針從文件頭開始移動2個字元

string=file.read(9) #從當前位置讀取10個字元

輸出結果:

取9個字元:

Python是一種

取9個字元:

thon是一種解釋

而下面的代碼會拋出錯誤:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

file.seek(2,1) #指針從當前位置開始移動2個字元

string=file.read(10) #從當前位置讀取10個字元

print(‘取10個字元: ‘+string)

錯誤提示為:

Traceback (most recent call last):

File “C:UserszymAppDataLocalProgramsPythonPython393.py”, line 7, in

file.seek(2,1) #指針從當前位置開始移動2個字元

io.UnsupportedOperation: can’t do nonzero cur-relative seeks

原因在於,必須使用b模式(即rb)打開文件,才能使用whence參數。但是,b模式(二進位)不適合文本文件。對於test.txt這樣的文本文件,為了解決通過改變指針讀取任意位置字元,可以採用加一個位置變數的方法來存儲指針的值。

例如:

with open(‘test.txt’,’r’,encoding=’utf-8′) as file:

#utf-8漢字與英文字元都佔一個字元

string=” #設置一個空字元串

pointer=0 #當前指針為0

str1=file.read(6) #讀取6個字元

pointer+=6 #指針變數後移6個字元

string+=str1 #string用來存放已讀取的字元

print(‘取6個字元: ‘,str1)

file.seek(pointer) #指針從文件頭開始移動2個字元

str1=file.read(8) #從當前位置讀取10個字元

pointer+=8 #指針跳過已讀取的字元

string+=str1

print(‘再取8個字元: ‘,str1)

print(‘所有讀取的字元: ‘,string)

print(‘當前指針所處的位置: ‘,pointer)

str1=file.read(1)

print(‘當前指針所處的字元: ‘,str1)

運行結果如下:

取6個字元:

Python

再取8個字元:

是一種解釋型語言

所有讀取的字元:

Python是一種解釋型語言

當前指針所處的位置:

14

當前指針所處的字元:

3、讀取一行數據readline()方法

語法格式:

file.readline()

例:

with open(‘test.txt’,’r’,encoding=’utf-8′) as f:

string=f.read(1) # 讀取文件的第一個字元

if string != ”: # 防止文件為空文件

lineno=0

while True:

line=f.readline()

if line != ”:

lineno+=1

print(‘第’+str(lineno)+’行:’+line,end=”)

# 因為每行都有自帶的分行符,print()語句不允許換行

else:

break # 出現空行時停止讀取

else:

print(‘要讀取的文件為空文件!’)

運行結果:

第1行:ython是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

第2行:Python是互動式語言: 這意味著,您可以在一個 Python 提示符 後直接執行代碼。

第3行:Python是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。

第4行:Python是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

4、讀取全部行命令readlines()方法

語法格式:

File.readlines()

該方法與read()方法一樣,在調用read()方法讀取文件內容時,文件必須是以r(只讀)或者r+(讀寫)方式打開。

例:

with open(‘test.txt’,’r’,encoding=’utf-8′) as f:

txt=f.readlines()

print(txt)

運行結果:

[‘Python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。 ‘, ‘Python是互動式語言: 這意味著,您可以在一個 Python 提示符 後直接執行代碼。 ‘, ‘Python是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。 ‘, ‘Python是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。 ‘]

從上面的運行結果可以看出,readlines()方法的返回值為一個字元串列表。所以,也可以以讀取列表元素的方法輸出。如下所示:

with open(‘test.txt’,’r’,encoding=’utf-8′) as f:

txt=f.readlines()

for line in txt:

print(line,end=”)

運行結果:

Python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

Python是互動式語言: 這意味著,您可以在一個 Python 提示符 後直接執行代碼。

Python是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。

Python是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

15.5 寫入文件內容

語法格式如下:

file.write(string)

其中,file為打開的文件對象,string為要寫入的字元串。

寫入文件內容時,文件必須以w(可寫)或a(追加)模式打開。否則,會拋出如下異常提示:

Traceback (most recent call last):

File “C:UsersAdministratorAppDataLocalProgramsPythonPython383.py”, line 2, in

f.write(‘人生苦短,我用Python!’)

io.UnsupportedOperation: not writable

關於write()方法的用法舉例如下:

with open(‘test.txt’,’a’,encoding=’utf-8′) as f:

f.write(‘人生苦短,我用Python!’)

with open(‘test.txt’,’r’,encoding=’utf-8′) as f:

txt=f.read()

print(txt)

運行結果:

Python是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

Python是互動式語言: 這意味著,您可以在一個 Python 提示符 後直接執行代碼。

Python是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。

Python是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發。

人生苦短,我用Python!

可以看出,由於文件的打開方式為a模式(追加模式),寫入的內容被寫入到文件的末尾。

在Python中,文件操作方法里沒有類似於字元串內的計算長度、查找、替換、截取、分隔等方法,為什麼沒有?原因可能是文件的類型太複雜,譬如說二進位文件,上述操作的意義不大。如果僅僅要對文本文件進行上述操作,完全可以先把文件的內容讀取到字元串中,再用相應的字元串函數或方法去操作就可以了。譬如,要將test.txt文件中的字元串『Python』替換為』PHP』,則可以用如下代碼完成:

txt1=”

with open(‘test.txt’,’r’,encoding=’utf-8′) as f:

txt1=f.read() #先將文件內容存入字元串txt1中

txt2=txt1.replace(‘Python’,’PHP’) #將txt1中的’Python’替換為’PHP’,並存入txt2

with open(‘test.txt’,’w’,encoding=’utf-8′) as f:

f.write(txt2) #將字元串txt2的內容寫回到文件中

這裡之所以分兩步打開文件(第一次為r模式,第二次為w模式),而沒有採用一次讀寫(r+、w+方式),因為那樣比較容易出錯。實踐證明,將文件的讀操作和寫操作分開其實是非常正確的選擇。

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

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

相關推薦

  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • Python如何導入py文件

    Python是一種開源的高級編程語言,因其易學易用和強大的生態系統而備受青睞。Python的import語句可以幫助用戶將一個模塊中的代碼導入到另一個模塊中,從而實現代碼的重用。本…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python寫文件a

    Python語言是一種功能強大、易於學習、通用並且高級編程語言,它具有許多優點,其中之一就是能夠輕鬆地進行文件操作。文件操作在各種編程中都佔有重要的位置,Python作為開發人員常…

    編程 2025-04-29

發表回復

登錄後才能評論