12文件操作
作者:互联网
一、磁盘文件
1.1 打开、关闭磁盘文件
(1)open()函数
文件对象=open(文件名,访问模式='r',缓冲方式='-1')
#以'w+'模式打开文件,再写入内容并读出 myfile=open('e:\\firstfile.txt','w+') myfile.write('my firstfile\n') myfile.write('hello cc\n') myfile.seek(0,0) for eachline in myfile: print(eachline) myfile.close()
文件访问模式:
r | 以读取方式打开文件 |
rU或U | 读取方式,同时提供通用换行符支持 |
w | 写入 |
a | 追加 |
r+ | 读写 |
w+ | 读写 |
a+ | 读写 |
rb | 二进制读取 |
wb | 二进制写入 |
ab | 二进制追加 |
rb+ | 二进制读写 |
wb+ | 二进制读写 |
ab+ | 二进制读写 |
1)使用'r'、'U'、'r+'、'rb+'模式打开的文件必须已经存在,否则报错
2)使用'w'、'w+'、'wb'、'wb+'模式打开的文件,若不存在则自动创建,若存在则清空再写入
3)使用'a'、'a+'、'ab'、'ab+'模式打开的文件,若不存在则自动创建,若存在则在文件末尾追加,即使使用seek()移动文件指针也会追加到末尾
# 之前自己的理解竟然都是错的,追加写内容是a,+不是指的追加,而是可以同时读写文件 # r, 只读模式【默认模式,文件必须存在,不存在则抛出异常】 # w, 只写模式【不可读;不存在则创建;存在则清空内容】 # a, 追加写模式【不可读;不存在则创建;存在则只追加内容】,可写,不可读 # +, 表示可以同时读写某个文件 # r+, 读写,从头开始写,会把开头的内容覆盖掉 # a+, 追加方式打开,可写可读,若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾 # w+, 写读,有内容则清空重写,因为是清空重写,所以读只是把刚写的内容读出来,而且写完的时候光标已经到文件末尾了 with open('data.txt', 'r+') as f: # f.write('0000000') f.seek(0, 0) data = f.read() print(data)
4)文件路径:d:\\myfile.txt 或 r'd:\myfile' 或 d:/myfile.txt
(2)file()函数
建议打开文件进行操作时使用open()函数,处理文件对象时使用file()函数
(3)close()函数
(4)with语句
引入with语句保证退出时调用close()函数
with open('e:\cc.txt', 'w+') as f: f.write('hello\n') f.write(('xixi'))
等价于:
myfile=open('e:\cc.txt','w') try: myfile.write('hello\n') myfile.write('xixi\n') finally: myfile.close()
1.2 写文件
(1)write()函数
写字符串
(2)writelines()函数
写字符串列表
myfile = open('e:\cc.txt', 'w+') listh=['天中','一','你说呢','螃中尼'] myfile.writelines(listh)
1.3 读文件
(1)read()函数
read([size]),所有内容读取到一个字符串中
(2)readlines()函数、readline()函数
readline()函数读取一行,包含结束符
readlines()函数读取所有行,返回值为一个字符串列表
myfile = open('e:\cc.txt', 'r') for i in myfile.readlines(): print(i)
(3)文件迭代
文件对象也是迭代器,前面的代码可以写成:
myfile = open('e:\cc.txt', 'r') for i in myfile:#省略myfile.readlines() print(i)
1.4 文件指针操作
seek(偏移量[,相对位置])
seek()用于移动文件指针到不同的位置,相对位置默认为0,表示从开头算起,1表示当前位置,2表示末尾。
tell()用于检测文件指针的位置。
偏移量的单位为字节。
# 重新设置文件读取指针到开头 f.seek(0, 0)
https://blog.csdn.net/cc27721/article/details/82464683
# 利用seek实现linux tail -f 功能,对文件进行跟踪 import time with open('00data','rb') as f: f.seek(0, 2) while True: line = f.readline() if line: print(line.decode(encoding='utf-8')) else: time.sleep(1) # # 读取文件最后一行 with open('00data', 'rb') as f: offs = -10 while True: # 当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开 f.seek(offs, 2) line = f.readlines()#读取一行内容,光标移动到第二行首部,只有打了回车,才会读这一行 if len(line) > 1: print(line[-1].decode('utf-8')) break else: offs *= 2 # 求出购物的总钱数,按行读取放到列表中,然后按空格分割 s = 0 with open('data.txt','r') as f: for line in f.readlines(): data = line.split(' ') price = int(data[1]) * int(data[2]) s += price print(s)
二、StringIO类文件
三、文件系统操作
四、Python读写Excel文件
标签:文件,12,读取,seek,myfile,操作,txt,open 来源: https://www.cnblogs.com/cc-world/p/13918040.html