对已有文件进行既读又写的操作时关于文件位置注意事项(适用于Python和C/C++)
當我們需要對現有文件進行讀取數據并修改文件中的數據時,就需要用到對已有文件進行既讀又寫的操作。有多種可讀且可寫的文件打開方式:r+,w+,a+,rb+,wb+,ab+,具體含義見下表。
| 打開 方式 | 讀寫 特性 | 文件數據 特性 | 對文件存在性的處理方式 | 備注 | |
| 文件已存在 | 文件不存在 | ||||
| r | 只讀 | 文本文件 | 必須已存在 | 打開失敗 | ? |
| w | 只寫 | 文本文件 | 覆蓋原文件 | 創建新文件 | ? |
| a | 只寫 | 文本文件 | 不覆蓋原文件 | 創建新文件 | 在文件末尾追加寫數據。 |
| rb | 只讀 | 二進制文件 | 必須已存在 | 打開失敗 | ? |
| wb | 只寫 | 二進制文件 | 覆蓋原文件 | 創建新文件 | ? |
| ab | 只寫 | 二進制文件 | 不覆蓋原文件 | 創建新文件 | 在文件末尾追加寫數據。 |
| r+ | 讀寫 | 文本文件 | 必須已存在 | 打開失敗 | ? |
| w+ | 讀寫 | 文本文件 | 覆蓋原文件 | 創建新文件 | ? |
| a+ | 讀寫 | 文本文件 | 不覆蓋原文件 | 創建新文件 | 在文件末尾追加寫數據。 |
| rb+ | 讀寫 | 二進制文件 | 必須已存在 | 打開失敗 | ? |
| wb+ | 讀寫 | 二進制文件 | 覆蓋原文件 | 創建新文件 | ? |
| ab+ | 讀寫 | 二進制文件 | 不覆蓋原文件 | 創建新文件 | 在文件末尾追加寫數據。 |
(上表中的讀寫方式助記:r--read,讀, ?w--write,寫, ?a--append或attach,追加, ?b--binary,二進制)
?
在此強調的是在對打開的同一個文件進行即讀又寫操作時,關于文件讀寫位置需要注意的事項。
下面以用r+方式打開的讀寫已經存在的文本文件為例。需要注意一點的是,讀操作和寫操作是共用一個文件位置指示的。也就是說文件操作沒有分別指示讀位置和寫位置指示的,只有一個文件位置指示。因此,如果讀操作和寫操作交替進行,那么,上次的讀操作結束時所在的讀寫位置,默認就是下次寫操作時的文件讀寫位置的開始,相應地,上次的寫操作結束的位置,默認就是下次讀操作開始的位置。如果這種默認文件讀寫位置不能滿足你的實際需要的話,必須用所操作文件對象的see(offset,whence)方法,將文件讀寫位置按自己的需要進行定位,此函數參數offset為偏移量,可正負,參數whence表示offset相對的基準位置,取值0,1,-1,分別表示文件開頭,當前位置和文件末尾。
實例,將數獨游戲數據文件中一行的81個數字,修改成9行,每行9個數字。
程序如下:
fObj = open(fileName, 'r+')
lines = fObj.readlines()
fObj.seek(0,0)
for aLine in lines:
??? fObj.write(aLine)
??? fObj.write('\n')
fObj.close()
總結
以上是生活随笔為你收集整理的对已有文件进行既读又写的操作时关于文件位置注意事项(适用于Python和C/C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中用input()和prin
- 下一篇: c++检测ip是否匹配子网掩码_网络工程