python文件处理
应用程序是不能 直接操作硬件的,应用程序需要通过OS操作硬件
一、三种文件路径的写法
①.r’文件路径’
f = open(r'C:\Users\zhilo\Desktop\a.txt','a',encoding='utf-8')#用什么字符编码写的,就需要用什么字符编码读
②.’\'双斜线
f = open('C:\\Users\\zhilo\\Desktop\\a.txt','a',encoding='utf-8')
③.’/'反斜线
f = open('C:/Users/zhilo/Desktop/a.txt','a',encoding='utf-8')
二、两种打开文件的方法
1.with方式打开文件,不用再写f.close()
with open(r'C:\Users\zhilo\Desktop\a.txt','rb') as f :
2.f = open()方式打开,需要写f.close()关闭文件
f = open(r'C:\Users\zhilo\Desktop\a.txt','r')
f.read()
f.close()
三、文件处理的读方法
f = open(r'C:\Users\zhilo\Desktop\a.txt','r',encoding='utf-8')
data = f.read(4) #4个字符
print(data)
f.close()
输出:
aaab
之前读取字符光标进行了移动,再次读取会读取光标右边所有字符
f = open(r'C:\Users\zhilo\Desktop\a.txt','r',encoding='utf-8')
f.read(4)
data = f.read()#读取光标右边所有字符
print(data)
f.close()
输出:
bccc
readline按行读取
f = open(r'C:\Users\zhilo\Desktop\a.txt','r',encoding='utf-8')
data = f.readline()#readline按行读取
print(data)
f.close()
输出:
aaabbccc
四、文件处理写方法
1.覆盖的写方法
f = open(r'C:\Users\zhilo\Desktop\a.txt','w',encoding='utf-8')
f.write('哈哈哈,哈哈哈')#write方法覆盖原有内容
f.writelines(('你','好','我','好','123'))#把列表或者元组拼接成一行字符串写入文件中
f.close()
a.txt文件中原内容aaabbccc被覆盖为哈哈哈,哈哈哈你好我好123
2.不覆盖的写方法
f = open(r'C:\Users\zhilo\Desktop\a.txt','a',encoding='utf-8')
f.write('呵呵呵,呵呵呵')
f.writelines(['o','k'])
f.close()
a.txt文件中原内容aaabbccc没有被覆盖,而是以append方式追加在后面
五、bytes类型操作文件
a = '你好'.encode('utf-8')#转码
print(a)
如果不解码打印结果是这样的:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
解码后:
print(a.decode('utf-8'))
你好
例:
f = open(r'C:\Users\zhilo\Desktop\a.txt','rb')
print(f.read().decode('utf-8'))
f.close()
输出:
aaabbccc呵呵呵,呵呵呵ok
b’你好’不可以转化成bytes,b’abc’可以把abc字符串转化成bytes
f = open(r'C:\Users\zhilo\Desktop\a.txt','wb')
f.write(b'你好') #会报错
f.close()
f = open(r'C:\Users\zhilo\Desktop\a.txt','wb')
f.write(b'abc')
f.close()
将abc以覆盖方式写入了文件
六、文件中seek移动光标
移动光标三种模式:
0模式可以用在bytes类型和字符串
1,2模式只能用在bytes类型下
python中汉字和英文字母所占的字节移步:https://blog.csdn.net/rzlongg/article/details/89502762
把光标移动到开头:
with open(r'C:\Users\zhilo\Desktop\a.txt','rb') as f:
f.seek(0)#把光标移动到开头
data = f.read().decode('utf-8')
print(data)
输出:
aabccc,123
把光标以相对位置移动
with open(r'C:\Users\zhilo\Desktop\a.txt','rb') as f:
f.read(1) #首先读一个字符
f.seek(5,1) #1代表相对位置即第一个字符后再向右移动5个字符的位置
print(f.read().decode('utf-8'))
输出:
,123
把光标移动到末尾
with open(r'C:\Users\zhilo\Desktop\a.txt','rb') as f:
f.seek(-4,2)#2代表把光标移动到末尾,再向左移动4个字符
data = f.read().decode('utf-8')
print(data)
输出:
,123
七、判断文件是否可读可写
1.判断文件是否可读:
f = open(r 'C:\Users\zhilo\Desktop\a.txt','a',encoding='utf-8')
f.flush()#保存(刷新到磁盘)
res = f.readable() #判断文件是否可读,如果以写的模式追加是不可读的
print(res)
f.close()
输出:
False
2.判断文件是否可写
f = open(r 'C:\Users\zhilo\Desktop\a.txt','a',encoding='utf-8')
f.flush()
res = f.writable() #判断文件是否可写
print(res)
f.close()
输出:
True