首頁 >後端開發 >Python教學 >python操作檔方法

python操作檔方法

小云云
小云云原創
2018-03-30 16:18:061567瀏覽

本文主要和大家介紹了python操作文件,以及簡單的複製備份. 希望能幫助到大家。

1.open函數
python中一切皆物件,所以正常我們開啟一個檔案的過程是
1.選取檔案-開啟檔案-編輯,複製,刪除等操作-關閉檔案
放到python中用程式碼實作就是:
f = open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
f.close()
其中file是檔案的絕對路徑加檔名,mode是檔案讀取方式,預設為r即唯讀方式,後面的選填
mode在原始碼的解釋為

‘r’       open for reading (default) 
‘w’       open for writing, truncating the file first 
‘x’       create a new file and open it for writing 
‘a’       open for writing, appending to the end of the file if it exists 
‘b’       binary mode 
‘t’       text mode (default) 
‘+’       open a disk file for updating (reading and writing) 
‘U’       universal newline mode (deprecated)

建議大家看原始碼:翻譯過來就是:
r   以唯讀方式開啟檔案。文件的指針將會放在文件的開頭。這是預設模式。
rb  以二進位格式開啟一個檔案以進行唯讀。文件指針將會放在文件的開頭。這是預設模式。
r+  開啟一個檔案用來讀寫。文件指針將會放在文件的開頭。
rb+ 以二進位格式開啟一個檔案用於讀寫。文件指針將會放在文件的開頭。
w   開啟一個檔案只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,請建立新文件。
wb  以二進位格式開啟一個檔案只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,請建立新文件。
w+  開啟一個檔案用來讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,請建立新文件。
wb+ 以二進位格式開啟一個檔案用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,請建立新文件。
a   開啟一個檔案用來追加。如果該檔案已存在,則檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,請建立新文件進行寫入。
ab  以二進位格式開啟一個檔案用來追加。如果該檔案已存在,則檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,請建立新文件進行寫入。
a+  開啟一個檔案用來讀寫。如果該檔案已存在,則檔案指標將會放在檔案的結尾。文件開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位格式開啟一個檔案以進行追加。如果該檔案已存在,則檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
這裡我們每次開啟file都要呼叫f.close方法比較麻煩也容易忘,這裡用with優化一下:
with open(“E:\githubproject\Source-code\basis\file\test. txt”, mode='r') as f:
pass
這裡f就相當於打開了文件,但是此時並沒有讀取文件,即沒有把文件放到內存中,f有很多內置方法,比較常用的是f.write()
這裡我們使用fwrite來實現檔案的複製:
with open(“E:\githubproject\Source-code\basis\file\test.txt”, mode='r') as f:
   contents = f.read()
   with open(“E:\githubproject\Source-code\basis\file\test_bak.txt”, mode=’w’) as f_bak:
       f_bak.write(contents)
但是這個方法每次都要寫,所以我們用個函數把檔名封裝進去.
def cp(path):
   with open(path, ‘r’) as f:
       data = f.read()
       filename = path[0:path.rindex(“.”)]  # 透過rindex方法取得.先前的字串(即檔案名稱)
       ext = path[path.rindex(“.”):]  # 透過rindex方法取得.之後的字串(即檔案後綴)
       with open(“%s_bak%s” % (filename, ext), ‘w’) as f_bak:  # 新建檔案名稱_bak的檔案開啟並操作
f_bak.write(data)

path = “E:\githubproject\Source-code\basis\file\test.txt”
path = path.replace(“\”, “/ ”)  # 將字串中含\的轉換為/,避免出現特殊字元轉換錯誤的問題

path = '/'.join(path.split('\')) #與上方法類似,但是還無法轉換特殊字元…

cp(path)
目前還沒解決windows中檔案名稱加路徑組合成了特殊字元的問題
我們呼叫read方法的時候會將文件寫入記憶體,但是如果我們要複製一個很大的檔案,比如有10個G的時候怎麼辦呢,
python檔案操作有個指標的說法,即當我們read到某處的時候,指標就會指到read的地方,當我們read()的時候,文件就指向了末尾,當read(100),指針即指向100,下次read再從此處讀取,f.seek(0, 0)即將指標回到初始位置,我們可以利用指標來多次讀取實現大檔案的複製:

def cp(path): 
    filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
    ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
    with open(path, ‘r’) as f, open(“%s_bak%s” % (filename, ext), ‘a’) as f_bak: 
        while True: 
            data = f.read(1024) 
            print(data) 
            f_bak.write(data) 
            if len(data) == 0: 
                break
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)

这篇文章主要介绍了python操作文件,以及简单的复制备份.
1.open函数
python中一切皆对象,所以正常我们打开一个文件的过程是
1.选中文件-打开文件-编辑,复制,删除等操作-关闭文件
放到python中用代码实现就是:
f = open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True):
f.close()
其中file是文件的绝对路径加文件名,mode是文件读取方式,默认为r即只读方式,后面的选填
mode在源码的解释为

‘r’       open for reading (default) 
‘w’       open for writing, truncating the file first 
‘x’       create a new file and open it for writing 
‘a’       open for writing, appending to the end of the file if it exists 
‘b’       binary mode 
‘t’       text mode (default) 
‘+’       open a disk file for updating (reading and writing) 
‘U’       universal newline mode (deprecated)

建议大家看源码:翻译过来就是:
r   以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+  打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w   打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a   打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
这里我们每次打开file都要调用f.close方法比较麻烦也容易忘,这里用with优化一下:
with open(“E:\githubproject\Source-code\basis\file\test.txt”, mode=’r’) as f:
   pass
这里f就相当于打开了文件,但是此时并没有读取文件,即没有把文件放到内存中,f有很多内置方法,比较常用的是f.write()
这里我们使用fwrite来实现文件的复制:

with open(“E:\githubproject\Source-code\basis\file\test.txt”, mode=’r’) as f: 
    contents = f.read() 
    with open(“E:\githubproject\Source-code\basis\file\test_bak.txt”, mode=’w’) as f_bak: 
        f_bak.write(contents) 但是这个方法每次都要写,所以我们用个函数把文件名封装进进去. def cp(path): 
    with open(path, ‘r’) as f: 
        data = f.read() 
        filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
        ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
        with open(“%s_bak%s” % (filename, ext), ‘w’) as f_bak:  # 新建文件名_bak的文件打开并操作 
            f_bak.write(data)
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)
目前还没解决windows中文件名加路径组合成了特殊字符的问题
我们调用read方法的时候会将文件写入内存,但是如果我们要复制一个很大的文件,比如有10个G的时候怎么办呢,
python文件操作有个指针的说法,即当我们read到某处的时候,指针就会指到read的地方,当我们read()的时候,文件就指向了末尾,当read(100),指针即指向100,下次read再从此处读取,f.seek(0, 0)即将指针回到初始位置,我们可以利用指针来多次读取实现大文件的复制:

def cp(path): 
    filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
    ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
    with open(path, ‘r’) as f, open(“%s_bak%s” % (filename, ext), ‘a’) as f_bak: 
        while True: 
            data = f.read(1024) 
            print(data) 
            f_bak.write(data) 
            if len(data) == 0: 
                break
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)

相关推荐:

Python 操作 MySQL 的正确姿势

以上是python操作檔方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn