Python二十一 Python中的檔案

2021-10-01 17:41:51 字數 4259 閱讀 5563

檔案的操作:開啟—>操作—>關閉

開啟檔案的引數:

r(readonly)預設引數

-只能讀 不能寫

-讀取檔案不存在 會報錯

w

-寫檔案(write only)

-檔案存在時,會清空檔案的內容並寫入新的檔案內容

-檔案不存在,會建立新的檔案並寫入內容

a

-寫檔案(write only)

-寫:不會清空檔案內容 會在檔案末尾追加

-寫:檔案不存在的時候,不會報錯 會建立新的檔案並寫入內容

w+

-r/w

-檔案不存在 不報錯 會建立新檔案並寫入

-會清空檔案(w) #讀檔案時會清空原檔案內容

r+

-r/w

-檔案不存在 報錯

-會清空檔案

a+

-r/w

-不會清空檔案內容 會在檔案末尾追加

-讀檔案的時候 一定要移動檔案指標(a/a+ 在檔案物件建立的時候 指標預設

就在檔案末尾)

「」"1 開啟檔案

f =

open

('/tmp/westosdddd'

,'r+'

)

2 操作

print

(f) content = f.read(

)print

(content)

#列印檔案內容

# 告訴當前檔案指標的位置

# 判斷檔案物件擁有的許可權

# print(f.readable()) #判斷是否可讀,若是返回true,否返回false

# print(f.writable()) #判斷是否可寫,若是返回true,否返回false

print

(f.tell())

#輸出檔案指標位置

# 移動檔案指標

# f.seek(0,0)

# print(f.read())

# print(f.tell())

# print('~~~~~~')

# print(f.read())

f.write(

'python'

)#在檔案中寫入內容

注意:讀檔案時和檔案的指標有很大的關係

3 關閉

f.close(

)

需要通過二進位制的方式讀取和寫入

r r+ w w+ a a+

=== rt rt+ wt wt+ at at+

rb rb+ wb wb+ ab ab+
# 讀取二進位制檔案內容

)# 寫入要複製的檔案的內容

f2.write(content)

f2.close(

)

預設情況下 讀取檔案的內容 小的檔案:直接read讀取即可

如果是乙個大檔案(檔案大小 >=記憶體大小) 使用 readline()

「」"

f =

open

('/tmp/passwd'

,'rb'

)# 按行讀取

# print(f.readline())

# print(f.readline())

# 按照位元組讀

print

(f.read(3)

)print

(f.read())

print

(f.tell())

# 讀取檔案內容 並返回乙個列表 列表元素分別為檔案的行的內容

# 讀取檔案內容 返回乙個列表 去掉後面的\n

f =open

('/tmp/passwd'

)# print(list(map(lambda x:x.strip(),f.readlines())))

print

([line.strip(

)for line in f.readlines()]

)f.close(

)

seek():移動檔案指標

第乙個引數:偏移量 >0:向後移動 <0:向前移動

第二個引數(基準位):

引數含義

0移動到檔案開頭

1當前位置

2移動到檔案末尾

注意:python3只用用rb+引數開啟檔案才可以正常使用seek函式移動檔案指標

示例:

f.seek(2,

1)print

(f.tell())

f.close(

)

上下文管理器 開啟檔案 執行完with語句後 自動關閉該檔案,使用上下文管理器可以不使用open和close

示例:

with

open

('/tmp/passwd'

)as f:

print

(f.read())

print

(f.closed)

1 練習1

題目:建立檔案data.txt 檔案共有100000行

每行存放乙個1~100之間的整數

解答:

import random

f =open

('data.txt'

,'a+'

)for i in

range

(100000):

f.write(

str(random.randint(1,

100))+

'\n'

)#使其換行

f.seek(0,

0)print

(f.read())

f.close(

)

2 練習2

生成100個mac位址並寫入檔案中,mac位址前6位(16進製制)為01-af-3b

01-af-3b(-xx)(-xx)(-xx)

-xx01-af-3b-xx

-xx01-af-3b-xx-xx

-xx01-af-3b-xx-xx-xx

解答:

import random

import string

defcreate_mac()

: mac =

'01-af-3b'

# 生成16進製制的數

hex_num = string.hexdigits

for i in

range(3

):# 從16進製制字串中隨機選擇兩個數字

# 返回值是乙個列表

n = random.sample(hex_num,2)

# 拼接內容 將小寫字母轉換稱大寫字母

sn =

'-'+

''.join(n)

.upper(

) mac += sn

return mac

# 主函式 隨機生成100個mac位址

defmain()

:with

open

('mac.txt'

,'w'

)as f:

for i in

range

(100):

mac = create_mac(

)print

(mac)

f.write(mac +

'\n'

)main(

)

python 學習筆記(二十一)

coding utf8 author liwei windows平台多程序匯入multiprocessing模組 from multiprocessing import process,queue from multiprocessing import pool import os,time,ran...

二十一 Python協程

greenlet模組 協程 協程相對於執行緒與程序,協程可以控制,執行緒程序不受到人為的控制 greenlet 可以控制協程的執行與暫停,greenlet不具備自動切換程序的能力 gevent 當遇到阻塞,gevent會自動切換,使cpu利用率達到將近100 greenlet 使用 gr1 gree...

Python 二十一 LEGB規則

一 解釋 python在查詢 名稱 的時候,是按照legb規則查詢的,local enclosed global buitl in。local 指的是函式或者類方法的內部。enclosed 指的是巢狀函式 閉包 global 模組中的全域性變數。buitl in 指的是python為自己保留的特殊名...