1、打開文件
在python,使用open函數,可以打開一個已經存在的文件,或者創建一個新文件
open(文件名,訪問模式)
示例如下:
f = open('test.txt', 'w')
說明:
2、關閉文件
close( )
示例如下:
#新建一個文件,文件名為:test.txt
f = open('test.txt', 'w')
#關閉這個文件
f.close()
3、路徑
linux
windows
4、文件的讀寫
寫數據(write)
使用write()可以完成向文件寫入數據
demo:
f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()
注意:
?如果文件不存在那么創建,如果存在那么就先清空,然后寫入數據
讀數據(read)
使用read(num)可以從文件中讀取數據,num表示要從文件中讀取的數據的長度(單位是字節),如果沒有傳入num,那么就表示讀取文件中所有的數據
demo:
f = open('test.txt', 'r')
content = f.read(5)
print(content)
print("-"*30)
content = f.read()
print(content)
f.close()
注意:
如果open是打開一個文件,那么可以不用寫打開的模式,即只寫open('test.txt')
如果使用讀了多次,那么后面讀取的數據是從上次讀完后的位置開始的
讀數據(readlines)
就像read沒有參數時一樣,readlines可以按照行的方式把整個文件中的內容進行一次性讀取,并且返回的是一個列表,其中每一行的數據為一個元素
f = open('test.txt', 'r')
content = f.readlines()
print(type(content))
i=1
for temp in content:
print("%d:%s"%(i, temp))
i+=1
f.close()
讀數據(readline)
f = open('test.txt', 'r')
content = f.readline()
print("1:%s"%content)
content = f.readline()
print("2:%s"%content)
f.close()
如果一個文件很大,比如5G,試想應該怎樣把文件的數據讀取到內存然后進行處理呢?
#把舊文件中的數據一行一行復制到新文件中
while 1:
count=oldfile.read(1024) ????#(按1024個字節復制)
if count=='':
break
newfile.write(count)
oldfile.close()
newfile.close()
方法二:
for linecontent in oldfile.readlines():
newfile.write(linecontent)
oldfile.close()
newfile.close()
5、應用1:制作文件的備份
任務描述:
輸入文件的名字,然后程序自動完成對文件進行備份
參考代碼:
oldFileName = input("請輸入要拷貝的文件名字:")
oldFile = open(oldFileName,'r')
#如果打開文件
if oldFile:
#提取文件的后綴
fileFlagNum = oldFileName.rfind('.')
if fileFlagNum > 0:
fileFlag = oldFileName[fileFlagNum:]
#組織新的文件名字
newFileName = oldFileName[:fileFlagNum] + '[復件]' + fileFlag
#創建新文件
newFile = open(newFileName, 'w')
#把舊文件中的數據,一行一行的進行復制到新文件中
for lineContent in oldFile.readlines():
newFile.write(lineContent)
#關閉文件
oldFile.close()
newFile.close()
6、文件的隨機讀寫
6.1、獲取當前讀寫的位置
在讀寫文件的過程中,如果想知道當前的位置,可以使用tell()來獲取
從0開始到字符的個數
#打開一個已經存在的文件
f = open("test.txt", "r")
str = f.read(3)
print ("讀取的數據是: ", str)
#查找當前位置
position = f.tell()
print ("當前文件位置: ", position)
str = f.read(3)
print ("讀取的數據是: ", str)
#查找當前位置
position = f.tell()
print ("當前文件位置: ", position)
f.close()
6.2、定位到某個位置
如果在讀寫文件的過程中,需要從另外一個位置進行操作的話,可以使用seek()
seek(offset, from)有2個參數
1.offset:偏移量
2.from:方向
a)0:表示文件開頭(python3)
b)1:表示當前位置(python2)
c)2:表示文件末尾(python2)
demo:把位置設置為:從文件開頭,偏移5個字節
#打開一個已經存在的文件
f = open("test.txt", "r")
str = f.read(30)
print ("讀取的數據是: ", str)
#查找當前位置
position = f.tell()
print ("當前文件位置: ", position)
#重新設置位置
f.seek(5,0)
#查找當前位置
position = f.tell()
print ("當前文件位置: ", position)
f.close()
demo:把位置設置為:離文件末尾,3字節處
#打開一個已經存在的文件
f = open("test.txt", "r")
#查找當前位置
position = f.tell()
print ("當前文件位置: ", position)
#重新設置位置
f.seek(-3,2)
#讀取到的數據為:文件最后3個字節數據
str = f.read()
print ("讀取的數據是: ", str)
f.close()
7、文件的重命名、刪除
7.1、文件重命名
os模塊中的rename()可以完成對文件的重命名操作
rename(需要修改的文件名,新的文件名)
import os
os.rename("畢業論文.txt", "畢業論文-最終版.txt")
7.2、刪除文件
os模塊中的remove()可以完成對文件的刪除操作
remove(待刪除的文件名)
import os
os.remove("畢業論文.txt")
8、文件夾的相關操作
8.1、創建文件夾
import os
os.mkdir("張三")
8.2、獲取當前目錄
import os
os.getcwd()
8.3、改變默認目錄
import os
os.chdir("../")
8.4、獲取目錄列表
import os
os.listdir("./")
8.5、刪除文件夾
import os
os.rmdir("張三")
9、應用2:批量修改文件名
#批量在文件名前加前綴
import os
funFlag = 1 # 1表示添加標志2表示刪除標志
folderName = './renameDir/'
#獲取指定路徑的所有文件名字
dirList = os.listdir(folderName)
#遍歷輸出所有文件名字
for name in dirList:
print name
if funFlag == 1:
newName = '[雍哥出品]-' + name
elif funFlag == 2:
num = len('[雍哥出品]-')
newName = name[num:]
print newName
os.rename(folderName+name, folderName+newName)