python之路(文件操作)

文件操作:顾名思义.用python操作修改系统上的文件,包括windows,linux,macos等

操作方式分为:读,写,追加,这三种又有小类,以下一一介绍,另外还有其他操作

一、读:有r模式.r+模式,rb模式,mode默认是r,只需要r的时候,mode可以不填

1.全部读取

f = open('文件操作1',encoding='utf-8',mode='r') #1.产生文件句柄。

#f, 变量f_obj,f_handler,f_h,fh,文件句柄。open() python的内置函数(内部调用的是windows的系统命令,打开文件)

content = f.read()  #2,对文件句柄进行操作。

print(content)

f.close()#3,关闭文件句柄。

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方

2.read(n)

f = open('文件操作1',encoding='utf-8',mode='r')

content = f.read(10) # r 模式,按照字符读取。

print(content)

f.close()

result:

北京是个好地方
上海

3.按行读取,每行会多增加一个换行符(readline)

f = open('文件操作1',encoding='utf-8',mode='r')
print(f.readline()) #
print(f.readline()) #
print(f.readline()) #
print(f.readline()) #
f.close()

result:

北京是个好地方

上海是个好地方

深圳是个好地方

重庆是个好地方

4.按行读取,返回一个list列表(readlines)

f = open('文件操作1',encoding='utf-8',mode='r')
content = f.readlines()
print(content)
f.close()

result:['北京是个好地方\n', '上海是个好地方\n', '深圳是个好地方\n', '重庆是个好地方\n']

5.for循环

f = open('文件操作1',encoding='utf-8',mode='r')
for line in f:
print(line.strip())
f.close()

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方

rb   文件操作中凡是 带b字母,都是与非文字类文件相关的。

f = open('美女1.jpg',mode='rb')
content = f.read()
print(content)
f.close()

result:

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xdb\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f\x17\x18\x16\x14\x18\x12\x14\x15\x14\xff\xdb\x00C\x01\x03\x04\x04\x05\x04\x05\t\x05\x05\t\x14\r\x0b\r\x14

f = open('文件操作1',mode='rb')
content = f.read(9) # rb 模式 n 按照字节读取。
print(content)
f.close()

result:

b'\xe5\x8c\x97\xe4\xba\xac\xe6\x98\xaf'

r+ 读写:先读后追加

f = open('文件操作1',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('666')
f.close()

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666

f = open('文件操作1',encoding='utf-8',mode='r+')
content = f.read(3)#这里 只打印前3个字符,所以是"北京是"
print(content)
f.write('666')
f.close()

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666666

不读直接写会怎样:直接从开始覆盖
f = open('文件操作1',encoding='utf-8',mode='r+')
f.write('深圳你好')
f.close()

result:

深圳你好好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666666

二、写 (1.没有文件,创建文件也要写。2.有文件,先清空,后写入。)

w模式

f = open('文件操作2', encoding='utf-8',mode='w')
f.write('深圳市南山区,福田区,罗湖区。。。')
f.close()

result:深圳市南山区,福田区,罗湖区。。。

wb模式

f = open('美女1.jpg',mode='rb')
content = f.read()
# print(content)

f1 = open(' 美女2.jpg',mode='wb')
f1.write(content)
f.close()
f1.close()

result:先读取美女1的字节给变量content,然后把变量content的数据写入到美女2,等于复制粘贴功能

w+写读模式

f = open('文件操作2', encoding='utf-8',mode='w+')
f.write('深圳市南山区,福田区,罗湖区。。。')
f.seek(3) # 调整光标
content = f.read()
print(content)
f.close()

result:圳市南山区,福田区,罗湖区。。。#从第3个字节开始读取,utf8一个汉字占3个字节

a 追加  (1.没有文件,创建文件也要写。2.有文件,直接在文件的最后面追加。)

另外还有ab,a+,a+b用得比较少

f = open('文件操作1', encoding='utf-8',mode='a')
f.write('\n南方水土好。。。')
f.close()

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。

# 其他方法:readable ,writable,seek

readable

f = open('文件操作1',encoding='utf-8')
if f.readable():
content = f.read()
print(content)
f.close()

result:

北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。

f = open('文件操作1',encoding='utf-8')
if f.writable():
content = f.read()
print(content)
f.close()

result:#因为默认是r,所以不可写,结果是空白

seek 调整光标到开始,seek(0) 调整光标到结尾seek(0,2)

f = open('文件操作1',encoding='utf-8')
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()

result:

是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。

f = open('文件操作1',mode='rb')
print(f.read())
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()

result:

b'\xe5\x8c\x97\xe4\xba\xac\xe6\x98\xaf\xe4\xb8\xaa\xe5\xa5

b'\xe6\x98\xaf\xe4\xb8\xaa\xe5\xa5\xbd\xe5\x9c\xb0\xe6\x96

tell 告知光标的位置

f = open('文件操作1',encoding='utf-8')
f.seek(0,2) # 按照字节去移动光标
print(f.tell())
f.close()

result:116

truncate 要在writable模式下进行截取。r+ a+ ..不能在w模式下使用,对原文件进行截取

f = open('文件操作1',encoding='utf-8',mode='r+')
print(f.truncate(6))#截取前6个字节
f.close()

result:6 

北京

r+和a+的使用效果一样

1,主动关闭文件句柄

with open('文件操作2',encoding='utf-8') as f1:
print(f1.read())

result:深圳市南山区,福田区,罗湖区。。。

2,开启多个文件句柄。

with open('文件操作2',encoding='utf-8') as f1,\
open('文件操作3',encoding='utf-8',mode='w') as f2:
print(f1.read())
f2.write('666666')

result:深圳市南山区,福田区,罗湖区。。。

文件的改的操作

# 1,以读的模式打开原文件,产生一个文件句柄f1.
# 2,   以写的模式创建一个新文件,产生一个文件句柄f2.
# 3,   读取原文件内容,进行修改,并将修改后的写入新文件。
# 4,将原文件删除。
# 5,将新文件重命名成原文件。

import os
with open('abby的深度剖析', encoding='utf-8') as f1,\
open('abby的深度解析.bak',encoding='utf-8',mode='w') as f2:
for line in f1:
new_line = line.replace('SB','abby')
f2.write(new_line)
os.remove('abby的深度剖析')
os.rename('abby的深度解析.bak', 'abby的深度剖析')

猜你喜欢

转载自www.cnblogs.com/mingxi/p/12330942.html
今日推荐