您好,登錄后才能下訂單哦!
1.文件是存儲(chǔ)在外部介質(zhì)上的數(shù)據(jù)的集合,文件的基本單位是字節(jié),文件所含的字節(jié)數(shù)就是文件的長度。每個(gè)字節(jié)都有一個(gè)默認(rèn)的位置,位置從0開始,文件頭的位置就是0,文件尾的位置是文件內(nèi)容結(jié)束后的后一個(gè)位置,該位置上沒有文件內(nèi)容,為空。文件的讀寫操作從文件指針?biāo)诘奈恢瞄_始,即讀會(huì)從文件指針?biāo)诘奈恢瞄_始讀取,寫會(huì)從文件指針?biāo)诘奈恢瞄_始寫,如有內(nèi)容,則會(huì)被覆蓋。
2.按文件中數(shù)據(jù)的組織形式把文件分為文本文件和二進(jìn)制文件兩類。文本文件存儲(chǔ)的是常規(guī)字符串,由文本行組成,通常以換行符'\n'結(jié)尾,只能讀寫常規(guī)字符串。文本文件可以用字處理軟件如gedit、記事本等進(jìn)行查看編輯。常規(guī)字符串是指文本編輯器能正常顯示、編輯的字符串,如英文字母串、漢字串、數(shù)字串。二進(jìn)制文件把對(duì)象在內(nèi)存中的內(nèi)容以字節(jié)串(bytes)的形式進(jìn)行存儲(chǔ)。不能用字處理軟件進(jìn)行編輯。
格式:文件變量名 = open(文件名[,打開方式[,緩沖區(qū)]])
文件名指定被打開文件對(duì)象
打開方式指定文件打開后能進(jìn)行的處理方式
緩沖區(qū)制定了讀寫文件的緩存模式。0表示不緩存,1表示緩存,如大余1則表示緩沖區(qū)的大小。默認(rèn)值為1
open()函數(shù)返回一個(gè)文件對(duì)象,通過該對(duì)象可以對(duì)文件進(jìn)行各種操作
1.普通文本文件
r:
- 只能讀,不能寫
- 讀取的文件不存在, 報(bào)錯(cuò)
- 報(bào)錯(cuò)信息:FileNotFoundError: [Errno 2] No such file or directory:xxxxxx
r+:
- 可以執(zhí)行讀寫操作
- 文件不存在,報(bào)錯(cuò)
- 默認(rèn)情況下,從文件指針?biāo)谖恢瞄_始寫入
w:
- 只能寫,不能讀
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 會(huì)清空文件內(nèi)容
w+:
- 可以執(zhí)行讀寫操作
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 會(huì)清空文件內(nèi)容
a:
- 只能寫,不能讀
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 不會(huì)清空文件內(nèi)容
a+:
- 可以執(zhí)行讀寫操作
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 不會(huì)清空文件內(nèi)容
2.二進(jìn)制文件:打開方式在普通文本文件上加'b'
rb:
- 只能讀,不能寫
- 讀取的文件不存在,報(bào)錯(cuò)
rb+:
- 可以執(zhí)行讀寫操作
- 文件不存在,報(bào)錯(cuò)
- 默認(rèn)情況下,從文件指針?biāo)谖恢瞄_始寫入
wb:
- 只能寫,不能讀
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 會(huì)清空文件內(nèi)容
wb+:
- 可以執(zhí)行讀寫操作
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 會(huì)清空文件內(nèi)容
ab:
- 只能寫,不能讀
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 不會(huì)清空文件內(nèi)容
ab+:
- 可以執(zhí)行讀寫操作
- 文件不存在,不報(bào)錯(cuò),自動(dòng)創(chuàng)建文件并打開
- 不會(huì)清空文件內(nèi)容
一、讀
f.next() #在文件使用迭代器時(shí)會(huì)使用到,在循環(huán)中,next()方法會(huì)在每次循環(huán)中調(diào)用,該方法返回文件的下一行,如果到達(dá)結(jié)尾(EOF),則觸發(fā) StopIteration
f.read([size]) #方法用于從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。
f.readline([size]) #從文件讀取整行,包括 "\n" 字符。如果指定了一個(gè)非負(fù)數(shù)的參數(shù),則返回指定大小的字節(jié)數(shù),包括 "\n" 字符。
f.readlines([size]) #讀取所有行(直到結(jié)束符 EOF)并返回列表,該列表可以由 Python 的 for... in ... 結(jié)構(gòu)進(jìn)行處理。如果碰到結(jié)束符 EOF 則返回空字符串。,若給定sizeint>0,則是設(shè)置一次讀多少字節(jié),這是為了減輕讀取壓力
二、寫
f.write([str]) #用于向文件中寫入指定字符串
f.writelines(sequence_of_strings) #向文件中寫入一序列的字符串
三、其他操作
f.flush() #用來刷新緩沖區(qū)的,即將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件,同時(shí)清空緩沖區(qū),不需要是被動(dòng)的等待輸出緩沖區(qū)寫入
f.seek(offset[, whence]) #于移動(dòng)文件讀取指針到指定位置
offset -- 開始的偏移量,也就是代表需要移動(dòng)偏移的字節(jié)數(shù)
whence -- 可選,默認(rèn)值為 0。給offset參數(shù)一個(gè)定義,表示要從哪個(gè)位置開始偏移;0代表從文件開頭開始算起,1代表從當(dāng)前位開始算起,2代表從文件末尾算起。
f.tell() #返回文件指針當(dāng)前位置
f.truncate([ size ]) #截?cái)辔募绻付丝蛇x參數(shù) size,則表示截?cái)辔募?size 個(gè)字符。 如果沒有指定 size,則從當(dāng)前位置起截?cái)啵唤財(cái)嘀?size 后面的所有字符被刪除。
f.close() #用于關(guān)閉一個(gè)已打開的文件
f.closed #返回true如果文件已被關(guān)閉,否則返回false。
f.fileno() #方法返回一個(gè)整型的文件描述符(file descriptor FD 整型),可用于底層操作系統(tǒng)的 I/O 操作。
f.isatty() #檢測(cè)文件是否連接到一個(gè)終端設(shè)備,如果是返回 True,否則返回 False
四、以下兩個(gè)屬性在python2中有,在python3中已經(jīng)被刪除了
f.mode #返回被打開文件的訪問模式。
f.name # 返回文件的名稱。
上下文管理器:打開文件, 執(zhí)行完with語句內(nèi)容之后, 自動(dòng)關(guān)閉文件對(duì)象
with open('/tmp/passwd') as f:
print("with語句里面:", f.closed)
print(f.read())
print("after with語句:", f.closed)
同時(shí)打開兩個(gè)文件對(duì)象( python2中不支持)
with open('/tmp/passwd') as f1, open('/tmp/passwdBack', 'w+') as f2:
# 將第一個(gè)文件的內(nèi)容寫入第二個(gè)文件中,文件復(fù)制即使如此。
f2.write(f1.read())
# 移動(dòng)指針移動(dòng)到文件最開始
f2.seek(0,0)
# 讀取指針內(nèi)容
print(f2.read())
python2中只能這么實(shí)現(xiàn)
with open('/tmp/passwd') as f1:
content = f1.read()
with open('/tmp/passwdBack', 'w+'):
f2.write(content)
# 1. 文件操作
1). 創(chuàng)建文件data.txt, 文件共100000行, 每行存放一個(gè)1~100之間的整數(shù).
2). 找出文件中數(shù)字出現(xiàn)次數(shù)最多的10個(gè)數(shù)字, 寫入文件mostNum.txt;
import random
with open('data.txt', mode='a+') as f:
for i in range(1000000):
f.write(str(random.randint(1,100))+'\n')
# 通過yield, 每次讀取一行進(jìn)行處理
def byLineReader(filename):
with open(filename) as f:
line = f.readline()
# 如果可以讀取到內(nèi)容, 返回該行信息
while line:
yield line
line = f.readline()
# read是一個(gè)生成器對(duì)象,
read = byLineReader('data.txt')
print(read)
# #1). next 讀取生成器的內(nèi)容
print(next(read))
print(next(read))
...
# #2). 通過for循環(huán)
for item in read:
print(item)
# ******** 文件對(duì)象是可以for循環(huán)遍歷的, 默認(rèn)遍歷的內(nèi)容為每一行的內(nèi)容.是節(jié)省內(nèi)存空間的。
from collections import Iterable
f = open('data.txt')
print(isinstance(f, Iterable))
for i, item in enumerate(f):
if i == 10:
break
print(i, item)
os 模塊提供了非常豐富的方法用來處理文件和目錄。
import os
# 1). 返回操作系統(tǒng)類型, 值為posix,是Linux操作系統(tǒng), 值為nt, 是windows操作系統(tǒng)
print(os.name)
print('Linux' if os.name=='posix' else 'Windows')
# 2). 操作系統(tǒng)的詳細(xì)信息
info = os.uname()
print(info)
print(info.sysname)
print(info.nodename)
# 3). 系統(tǒng)環(huán)境變量
print(os.environ)
# 4). 通過key值獲取環(huán)境變量對(duì)應(yīng)的value值
print(os.environ.get('PATH'))
print(os.getenv('PATH'))
遍歷指定目錄下所有內(nèi)容
import os
from os.path import join
for root, dirs, files in os.walk('/var/log'):
#print(root, dirs, files)
for name in files:
print(join(root, name))
os模塊常用方法大全:
os.access(path, mode)
檢驗(yàn)權(quán)限模式
os.chdir(path)
改變當(dāng)前工作目錄
os.chflags(path, flags)
設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記。
os.chmod(path, mode)
更改權(quán)限
os.chown(path, uid, gid)
更改文件所有者
os.chroot(path)
改變當(dāng)前進(jìn)程的根目錄
os.close(fd)
關(guān)閉文件描述符 fd
os.closerange(fd_low, fd_high)
關(guān)閉所有文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯(cuò)誤會(huì)忽略
os.dup(fd)
復(fù)制文件描述符 fd
os.dup2(fd, fd2)
將一個(gè)文件描述符 fd 復(fù)制到另一個(gè) fd2
os.fchdir(fd)
通過文件描述符改變當(dāng)前工作目錄
os.fchmod(fd, mode)
改變一個(gè)文件的訪問權(quán)限,該文件由參數(shù)fd指定,參數(shù)mode是Unix下的文件訪問權(quán)限。
os.fchown(fd, uid, gid)
修改一個(gè)文件的所有權(quán),這個(gè)函數(shù)修改一個(gè)文件的用戶ID和用戶組ID,該文件由文件描述符fd指定。
os.fdatasync(fd)
強(qiáng)制將文件寫入磁盤,該文件由文件描述符fd指定,但是不強(qiáng)制更新文件的狀態(tài)信息。
os.fdopen(fd[, mode[, bufsize]])
通過文件描述符 fd 創(chuàng)建一個(gè)文件對(duì)象,并返回這個(gè)文件對(duì)象
os.fpathconf(fd, name)
返回一個(gè)打開的文件的系統(tǒng)配置信息。name為檢索的系統(tǒng)配置的值,它也許是一個(gè)定義系統(tǒng)值的字符串,這些名字在很多標(biāo)準(zhǔn)中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
os.fstat(fd)
返回文件描述符fd的狀態(tài),像stat()。
os.fstatvfs(fd)
返回包含文件描述符fd的文件的文件系統(tǒng)的信息,像 statvfs()
os.fsync(fd)
強(qiáng)制將文件描述符為fd的文件寫入硬盤。
os.ftruncate(fd, length)
裁剪文件描述符fd對(duì)應(yīng)的文件, 所以它最大不能超過文件大小。
os.getcwd()
返回當(dāng)前工作目錄
os.getcwdu()
返回一個(gè)當(dāng)前工作目錄的Unicode對(duì)象
os.isatty(fd)
如果文件描述符fd是打開的,同時(shí)與tty(-like)設(shè)備相連,則返回true, 否則False。
os.lchflags(path, flags)
設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記,類似 chflags(),但是沒有軟鏈接
os.lchmod(path, mode)
修改連接文件權(quán)限
os.lchown(path, uid, gid)
更改文件所有者,類似 chown,但是不追蹤鏈接。
os.link(src, dst)
創(chuàng)建硬鏈接,名為參數(shù) dst,指向參數(shù) src
os.listdir(path)
返回path指定的文件夾包含的文件或文件夾的名字的列表。
os.lseek(fd, pos, how)
設(shè)置文件描述符 fd當(dāng)前位置為pos, how方式修改: SEEK_SET 或者 0 設(shè)置從文件開始的計(jì)算的pos; SEEK_CUR或者 1 則從當(dāng)前位置計(jì)算; os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效
os.lstat(path)
像stat(),但是沒有軟鏈接
os.major(device)
從原始的設(shè)備號(hào)中提取設(shè)備major號(hào)碼 (使用stat中的st_dev或者st_rdev field)。
os.makedev(major, minor)
以major和minor設(shè)備號(hào)組成一個(gè)原始設(shè)備號(hào)
os.makedirs(path[, mode])
遞歸文件夾創(chuàng)建函數(shù)。像mkdir(), 但創(chuàng)建的所有intermediate-level文件夾需要包含子文件夾。
os.minor(device)
從原始的設(shè)備號(hào)中提取設(shè)備minor號(hào)碼 (使用stat中的st_dev或者st_rdev field )。
os.mkdir(path[, mode])
以數(shù)字mode的mode創(chuàng)建一個(gè)名為path的文件夾.默認(rèn)的 mode 是 0777 (八進(jìn)制)。
os.mkfifo(path[, mode])
創(chuàng)建命名管道,mode 為數(shù)字,默認(rèn)為 0666 (八進(jìn)制)
os.mknod(filename[, mode=0600, device])
創(chuàng)建一個(gè)名為filename文件系統(tǒng)節(jié)點(diǎn)(文件,設(shè)備特別文件或者命名pipe)。
os.open(file, flags[, mode])
打開一個(gè)文件,并且設(shè)置需要的打開選項(xiàng),mode參數(shù)是可選的
os.openpty()
打開一個(gè)新的偽終端對(duì)。返回 pty 和 tty的文件描述符。
os.pathconf(path, name)
返回相關(guān)文件的系統(tǒng)配置信息。
os.pipe()
創(chuàng)建一個(gè)管道. 返回一對(duì)文件描述符(r, w) 分別為讀和寫
os.popen(command[, mode[, bufsize]])
從一個(gè) command 打開一個(gè)管道
os.read(fd, n)
從文件描述符 fd 中讀取最多 n 個(gè)字節(jié),返回包含讀取字節(jié)的字符串,文件描述符 fd對(duì)應(yīng)文件已達(dá)到結(jié)尾, 返回一個(gè)空字符串。
os.readlink(path)
返回軟鏈接所指向的文件
os.remove(path)
刪除路徑為path的文件。如果path 是一個(gè)文件夾,將拋出OSError; 查看下面的rmdir()刪除一個(gè) directory。
os.removedirs(path)
遞歸刪除目錄。
os.rename(src, dst)
重命名文件或目錄,從 src 到 dst
os.renames(old, new)
遞歸地對(duì)目錄進(jìn)行更名,也可以對(duì)文件進(jìn)行更名。
os.rmdir(path)
刪除path指定的空目錄,如果目錄非空,則拋出一個(gè)OSError異常。
os.stat(path)
獲取path指定的路徑的信息,功能等同于C API中的stat()系統(tǒng)調(diào)用。
os.stat_float_times([newvalue])
決定stat_result是否以float對(duì)象顯示時(shí)間戳
os.statvfs(path)
獲取指定路徑的文件系統(tǒng)統(tǒng)計(jì)信息
os.symlink(src, dst)
創(chuàng)建一個(gè)軟鏈接
os.tcgetpgrp(fd)
返回與終端fd(一個(gè)由os.open()返回的打開的文件描述符)關(guān)聯(lián)的進(jìn)程組
os.tcsetpgrp(fd, pg)
設(shè)置與終端fd(一個(gè)由os.open()返回的打開的文件描述符)關(guān)聯(lián)的進(jìn)程組為pg。
os.tempnam([dir[, prefix]])
Python3 中已刪除。返回唯一的路徑名用于創(chuàng)建臨時(shí)文件。
os.tmpfile()
Python3 中已刪除。返回一個(gè)打開的模式為(w+b)的文件對(duì)象 .這文件對(duì)象沒有文件夾入口,沒有文件描述符,將會(huì)自動(dòng)刪除。
os.tmpnam()
Python3 中已刪除。為創(chuàng)建一個(gè)臨時(shí)文件返回一個(gè)唯一的路徑
os.ttyname(fd)
返回一個(gè)字符串,它表示與文件描述符fd 關(guān)聯(lián)的終端設(shè)備。如果fd 沒有與終端設(shè)備關(guān)聯(lián),則引發(fā)一個(gè)異常。
os.unlink(path)
刪除文件路徑
os.utime(path, times)
返回指定的path文件的訪問和修改的時(shí)間。
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
輸出在文件夾中的文件名。通過在樹中游走,向上或者向下。
os.write(fd, str)
寫入字符串到文件描述符 fd中. 返回實(shí)際寫入的字符串長度
來自:http://www.runoob.com/python3/python3-os-file-methods.html
import sys
# 返回一個(gè)列表, 第一個(gè)元素為當(dāng)前文件名
print(sys.argv)
print(sys.argv[0])
# 如果獲取腳本傳入的第n個(gè)參數(shù), sys.argv[n]
批量更改文件名
# 創(chuàng)建目錄img,在此目錄下隨機(jī)生成100個(gè)以.png結(jié)尾的文件,然后把以.png結(jié)尾的文件改成以.jpg結(jié)尾
import os,random,string,sys
# 創(chuàng)建目錄并隨機(jī)生成.png文件
os.mkdir('img')
for i in range(100):
os.mknod('img/'+''.join(random.sample(string.ascii_letters+string.digits,4))+'.png')
def modify_suffix(dirname,old_suffix,new_suffix):
if not os.path.exists(dirname):
print('目錄不存在!')
exit()
old_suffix_file_list = list(filter(lambda x:x.endswith(old_suffix),os.listdir(dirname)))
#字符串方法:
#new_suffix_file_list = []
# for i in old_suffix_file_list:
# new_suffix_file_list.append(i.replace(old_suffix,new_suffix))
# print(new_suffix_file_list)
# for i,j in zip(old_suffix_file_list,new_suffix_file_list):
# print(dirname+i,dirname+j)
# os.rename(dirname+'/'+i,dirname+'/'+j)
#文件操作方法:
file_name = [os.path.splitext(name)[0] for name in old_suffix_file_list]
for i in file_name:
os.rename(dirname+'/'+i+old_suffix,dirname+'/'+i+new_suffix)
modify_suffix('img','.png','.jpg')
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。