天天看點

5.9筆記+day 13作業

檔案

#檔案的簡單操作

#1、讀取檔案

file = open(“a.txt”,mode=“r”)

x=file.read()
print(x)
file.close()
#這裡的file 叫做檔案的句柄(變量)用來操作檔案第一個參數是檔案的路徑,第二個參數mode=通路檔案的類型,r表示讀,預設也是r模式
           

#2、寫檔案

file = open("a.txt",mode="w")
file.write("asdfghj")
file.close()
           

#檔案權限

#r表示隻讀,rb是以二進制格式打開一個檔案用于隻讀,r+表示打開一個檔案用于讀寫,rb+表示已二進制格式打開一個檔案用于讀寫

#w表示隻寫,wb表示以二進制格式打開一個檔案隻用于寫入,w+表示打開一個檔案用于讀寫,wb+表示以二進制格式打開一個檔案用于讀寫

#a表示打開一個檔案用于追加,不能讀,ab表示以二進制打開一個檔案用于追加,a+是打開一個檔案用于讀寫,ab+是以二進制打開一個檔案用于追加

檔案操作

#讀操作

#read() 一次性讀取檔案的全部内容,括号内可以指派規定讀取的長度

file = open("a.txt")
ret = file.read()
print(ret)
file.close()
           

#readline() 每次讀取一行,并且自帶換行功能,每一行末尾會讀到\n

file = open("a.txt")
ret = file.readline()
print(ret)
           

#readlines() 一次性以行的形式讀取檔案的所有内容并傳回一個list,需要去周遊讀出來

file = open("a.txt")
ret=file.readlines()
print(ret,type(ret))
           

#循環讀取 file句柄是一個可疊代的對象,是以可以循環讀取檔案中的内容,每次讀一行

file = open("a.txt")
for line in file:
    print(line)
           

#寫操作

#write()

file = open("a.txt",mode="w")
file.write("aaaaa")
file.write("werewwe")
file.close()
           

#writelines file.writelines(seq) 把seq的内容全部寫到檔案中(多行一次性寫入)

file = open("a.txt",mode="w")
lst = ["aa\n","ddfd","werdf"]
file.writelines(lst)
file.close()
           

#with 使用本方法操作檔案,可以不用關閉檔案,會自動關閉檔案

with open("a.txt") as file :
    ret= file.read()
    print(ret)
           

#亂碼

#Python讀寫檔案時,預設使用的編碼為平台編碼,也就是gbk,在pycharm中建立的檔案預設使用的是utf-8編碼

with open(“a.txt”,mode=“w”,encoding=“utf-8”) as f:#encoding="utf-8"就是規定了編碼

f.write(“哈哈哈”)

os子產品

重命名檔案 os.rename()

import os
os.rename("a.txt","sd.txt")    
           

#删除檔案os.remove()

import os
os.remove("sd.txt")#如果是目錄的話會報錯
           

建立目錄 mkdir() 生成的單層目錄

import os
os.mkdir("zzz")
           

#建立多級目錄makedirs()

os.makedirs("xxxxx\\xxxxx\\xxxxx")
           

#删除目錄 rmdir() 删除一層目錄

import os
os.rmdir("zzz")
#删除多級目錄
os.removedirs("xxxxx\\xxxxx\\xxxxx")
           

#擷取目前所在目錄 getcwd()

import os
path = os.getcwd()
print(path)
           

#擷取目錄清單os.listdir(path)

import os
lst=os.listdir(os.getcwd())
print(lst)
           

#切換所在目錄 chdir()

import os
print(os.getcwd())
os.chdir(os.getcwd()+"\\aaa")
print(os.getcwd())
           

#判斷檔案或檔案夾是否存在

import os
b=os.path.exists("5.5learn.py")
c=os.path.exists("aaa")
d=os.path.exists("wwwww.py")
e=os.path.exists("qqqqq")
print(b,c,d,e)#True True False False
           

#判斷是否為檔案 isfile()

import os
print(os.path.isfile("aaa"))#False
print(os.path.isfile("5.5learn.py"))#True
           

#判斷是否為目錄 isdir()

import os
print(os.path.isdir("aaa"))#True
print(os.path.isdir("5.5learn.py"))#False
           

#判斷是否為絕對路徑

import os
print(os.path.isabs("d:\\pywork\\aaa"))#True
print(os.path.isabs("aaa"))#False
           

#擷取絕對路徑

import os
abspath = os.path.abspath("aaa")
print(abspath)
           

#擷取路徑中的最後部分

import os
path = os.path.basename("d:\\pywork\\aaa")
print(path)#aaa
           

#擷取路徑中的路徑部分

import os 
path=os.path.dirname("d:\\pywork\\aaa")
print(path)#d:\pywork
           

#自定義mkdirs方法

import os
def mkdirs(path):
    file_lst=path.split("/")
    for file in file_lst:
        if not os.path.exists(file):
            os.mkdir(file)
        os.chdir(file)

if __name__=="__main__":
    path=input("請輸入")
    mkdirs(path)
           

#檔案搜尋

練習遞歸

‘’’

使用者輸入檔案名以及開始搜尋的路徑,搜尋該檔案是否存在,如遇到檔案夾,則進入檔案夾繼續搜尋

‘’’

import os
import sys

sys.setrecursionlimit(1000)  # set the maximum depth as 1500
def file_find(file_path, file_name):
    if os.path.isdir(file_path):
        file_list = os.listdir(file_path)
        for each in file_list:
            temp_dir = file_path + os.sep + each
            if os.path.isdir(temp_dir):
                temp = file_find(temp_dir, file_name)
                if temp == True:
                    return True
            elif os.path.isfile(temp_dir) and each == file_name:
                return True
        return False
    else:
        print('{}不是一個目錄'.format(file_path))
print(file_find(os.getcwd(), 'b.txt'))
           

練習遞歸

#通過給定的檔案夾, 列舉出這個檔案夾當中, 所有的檔案,以及檔案夾, 子檔案夾當中的所有檔案

import os

def listFilesToTxt(dir, file):
    file_list = os.listdir(dir)
    for file_name in file_list:
        new_fileName = dir + "/" + file_name
        if os.path.isdir(new_fileName):
            file.write(new_fileName + "\n")
            listFilesToTxt(new_fileName, file)
        else:
            file.write("\t" + file_name + "\n")
    file.write("\n")


f = open(os.getcwd() + "\\list.txt", "a", encoding='utf-8')
listFilesToTxt(os.getcwd() + "\\dir", f)