其他分享
首页 > 其他分享> > 12文件操作

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