ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12文件操作

2021-04-03 12:01:10  阅读:224  来源: 互联网

标签:文件 12 读取 seek myfile 操作 txt open


一、磁盘文件

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有