首页 > 代码库 > 10-文件管理
10-文件管理
文件打开--读取--关闭:
f = open(‘path/to/path‘) :可以相对路径或绝对路径
print(f) :打印获取到的文件句柄信息,而非文件内容
data = http://www.mamicode.com/f.read() :根据文件句柄信息,读取内容,将读取到的内容赋值给变量data
print(data) :打印变量就相当于打印文件内容
f.close()
open打开文件,如果不指定打开的编码格式,则会使用所在平台的编码格式为默认打开格式
open(‘path/to/path‘, ‘r‘, encoding=‘utf-8‘)
- ‘path/to/path‘:读取的文件,相对路径或绝对路径
- ‘r‘:指定对文件打开时用什么方法,不指定默认为只读r,r只读,r+读写,w写,w+写读,a追加,a+追加读
- encoding=‘utf-8‘:指定以什么编码读取文件
with...as...:自动打开文件并自动关闭
with open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘) as f1, open(‘b.txt‘, ‘r‘, encoding=‘utf-8‘) as f2:
print(f1.read())
print(f2.read())
读:
f = open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘)
从打开到关闭这段过程中,要注意读取文件时,光标所在位置
比如,第一次read时,光标从文件内容开头位置(即0位置),一直到末尾全部读取完毕,光标则会定位在末尾处,如果这时文件没有被关闭,而是又开始读取,那么就会从光标所在位置继续读取,结果自然是什么内容也读不到;
f = open(‘a.txt‘, encoding=‘utf-8‘) data = f.read() print(data) print(‘data2------------->‘) data2 = f.read() print(data2) 运行结果: hello,world. what is your name? how are you? data2------------->
写:
f = open(‘a.txt‘, ‘w‘, encoding=‘utf-8‘)
-有文件则对其内容清空
-没有则创建
方法:
.write(‘1111111\n22222‘):写入
.writelines([]):写入一个列表
一个示例:
要求:
有一个文件a.txt,内容如下:
111111111111
22222222222222
333333333333
4444444444444
555555555555555
请将444444444444全部转换成ddddddddddddd
import os read_f = open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘) write_f = open(‘b.txt‘, ‘w‘, encoding=‘utf-8‘) for line in read_f.readlines(): if line.startwith(‘4444444444‘): line = ‘dddddddddddd\n‘ write_f.write(line) read_f.close() write_f.close() os.remove(‘a.txt‘) os.rename(‘b.txt‘, ‘a.txt‘)
‘rb‘方式:
以bytes格式读取文件,读取到的内容以bytes格式显示
如a.txt内容为‘你好’
with open(‘a.txt‘, ‘rb‘) as f: print(f.read()) 运行结果: b‘\xe4\xbd\xa0\xe6\x98\xaf\xe8\xb0\x81‘ with open(‘a.txt‘, ‘rb‘) as f: print(f.read().decode(‘utf-8‘)) 运行结果: 你好
‘wb‘方式:
以bytes格式写入内容到文件,写入的内容是二进制bytes格式
如写入内容为二进制格式的‘你好吗’到c.txt中
with open(‘c.txt‘, ‘wb‘) as f: f.write(‘你好吗‘.encode(‘utf-8‘))
查看c.txt文件内容为‘你好吗’
文件控制方法:
.seek(n):指定光标移动到第n个字节位置(以开头为标准,后移n个字节)
f.seek(0)表示让光标移动到内容开头
f = open(‘a.txt‘, encoding=‘utf-8‘) data = f.read() print(data) print(‘data2------------->‘) f.seek(0) data2 = f.read() print(data2) 运行结果: hello,world. what is your name? how are you? data2-------------> hello,world. what is your name? how are you?
f.seek(2, 1):代表以当前光标所在的位置开始,往后移动2个bytes,仅在b模式打开时可用
f.seek(-2,2):代表以末尾为起始位置,往前移动2个bytes,注意隐藏的换行符或制表符也要算一个字节
对文件其他的方法:
.close():文件关闭
.readline():一次读一行
.readlines():读取所有,以每行为一个元素,保存为一个列表
.tell():获取当前光标所处位置
.truncate(n):截断文件,n表示截取n个字节(二进制)
with open(‘c.txt‘, ‘r+‘, encoding=‘utf-8‘) as f: f.truncate(3) 运行结果: 查看c.txt文件内容 你
一个示例:
要求:监控一个文件access.log的内容,如果有新内容,则提示出来:
import time with open(‘access.log‘, ‘r‘, encoding=‘utf-8‘) as f: f.seek(0, 2) while True: line = f.readline().strip() if line: print(‘新增:‘, line) time.sleep(1)
10-文件管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。