轉載請註明預見才能遇見的博客:http://my.csdn.net/
原文地址:https://blog.csdn.net/pcaxb/article/details/91982984
人工智能系列-Python系列(六)文件操作
目錄
2)讀取一行,如果使用了read讀取了,就是整個文件都讀取了,就不能再讀取
1.如果不知道文件編碼,就使用latin-1 ,拉丁編碼基本都支持
4.刷新文件,修改文件之後需要刷新文件,不然文件就是沒有保存的
2)其餘的文件內光標移動都是以字節爲單位如seek,tell,truncate
一、文本模式打開文件
# 注意 open這裏讀取的格式是系統格式,所以這裏需要設置文件格式
# 打開文件,得到文件句柄並賦值給一個變量
# r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
# w,只寫模式【不可讀;不存在則創建;存在則清空內容】
# a, 之追加寫模式【不可讀;不存在則創建;存在則只追加內容】
# 擴展:
# "+" 表示可以同時讀寫某個文件
# r+, 讀寫【可讀,可寫】
# w+,寫讀【可讀,可寫】
# a+, 寫讀【可讀,可寫】
# file1 = open("file1", 'r+', encoding='utf-8')
1.讀文件
# 通過句柄對文件進行操作
# data = file1.read() # 默認情況是隻讀
# print(data) # 打印文件內容
1)判斷是否可讀
print(file1.readable()) #
2)讀取一行,如果使用了read讀取了,就是整個文件都讀取了,就不能再讀取
print(file1.readline())
3)讀取文件所有內容,然後放到列表中
print(file1.readlines())
2.寫文件
# file1.write('1-2222222222\n')
# file1.write('2-2222222222\n')
# file1.write('3-2222222222\n')
1)判斷是否可寫
# print(file1.writable()) #
# names = ['111\n', '222\n', '333\n'] # 文件內容只能是字符串
# file1.writelines(names)
3.追加文件
# 如果 open("file1", 'a', encoding='utf-8') 這裏的模式設置的是a ,write就是追加寫
4.讀寫文件
# file1.write("kkkk") # 這裏是覆蓋文件
# content = file1.read()
# print(content)
5.修改文件
# 把文件中的111全部替換成一一一
# datas = file1.readlines()
# datasc = []
# print(datas)
# for data in datas:
# data = data.replace('111', '一一一')
# datasc.append(data)
# print(datasc)
# file1.writelines(datasc)
# file1.write("HHHH")
6.with xxx as xxx文件
# with open('file1','r+',encoding='utf-8') as f1:
# with open('file1', 'r', encoding='utf-8') as f1, \
# open('file2', 'w', encoding='utf-8') as f2:
# f1_data = f1.read()
# f2.write(f1_data)
# f1.close()
# f2.close()
7.關閉文件
file1.close()
二、非文本模式打開文件
# 對於非文本文件,我們只能使用b模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,
# 使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式)
# rb、wb、ab
# 注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼
1.b的方式不能指定編碼
# file1 = open('file1', 'rb+')
# data = file1.read()
# print(data) # rb讀取的是二進制
2.二進制和其他編碼互轉
# encode:字符串--bytes
# decode:bytes--字符串
1)二進制轉換成uft-8
# print(data.decode('UTF-8')) # 二進制轉換成uft-8
2)uft-8換成二進制
# file1.write('===你你你'.encode('utf-8'))
# file1.write(bytes('+++我我我', encoding='utf-8'))
三.文件的其他函數
1.如果不知道文件編碼,就使用latin-1 ,拉丁編碼基本都支持
file1 = open('file1', 'r', encoding='UTF-8')
2.判斷文件是否關閉
print(file1.closed) # False
3.文件編碼
print(file1.encoding) # utf-8
4.刷新文件,修改文件之後需要刷新文件,不然文件就是沒有保存的
# file1.flush()
# print(file1.name) # file1 文件名字
5.文件內光標移動
1)read(3):
# a)文件打開方式爲文本模式時,代表讀取3個字符
# b)文件打開方式爲b模式時,代表讀取3個字節
2)其餘的文件內光標移動都是以字節爲單位如seek,tell,truncate
# a)seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes爲單位移動的
# b)truncate是截斷文件,所以文件的打開方式必須可寫,但是不能用w或w+等方式打開,因爲那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果
# tell 光標所在位置
# print(file1.tell()) # 0
# file1.readline()
# print(file1.tell()) # 18
6.讀取文件中真正的換行符號newline
file2 = open('file2', 'r', encoding='utf-8', newline='')
print(file1.readlines())
print(file2.readlines())
7.seek移動光標的位置
# file1.seek()
file1.seek(5)
print(file1.tell()) # 5
file1.seek(32)
print(file1.tell())
參考資料;https://www.cnblogs.com/linhaifeng/articles/5984922.html
人工智能系列-Python系列(六)文件操作