py03_01:文件流

文件流

1.文件流的本质

文件流的操作,一般都会有三个步骤
1. 打开文件
2. 操作文件
3. 关闭文件


f = open('test', encoding='utf8',mode='r')
print(f.read())
f.close()

 

# 文件流的基本参数
# 1. file:      打开一个文件
# 2. mode:      打开的模式,默认模式为txt模式
# 3. buffering: 设置缓冲
# 4. encoding:  字符编码,一般用utf-8
# 5. errors:    报错级别
# 6. newline:   区分换行符
# 7. closefd:   传入的file参数类型
# 8. opener:


# mode详情
# r     只读,无法编写文件
# w 只写,(注意:工作中千万慎用此模式,这个模式下,pycharm如果重新运行,导致整个文件被清空后,再重新写入。导致所有数据丢失)
# a append(追加模式),即在文件最后写入,但也一样不支持读文件
# r+    打开一个文件用于读写。文件指针将会放在文件的结尾写入。(只能从最后面位置写入)
# w+    打开一个文件用于写读。先覆盖原来的文件,然后再写入。
# a+    追加读,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
一般情况我们用r+模式和a+模式,安全

还有针对二进制文件的操作,用法与上面的是一样的。但二进制文件的话在要后面+b
(如:ab,rb,wb,rb+...)

 文件流的常用方法

f.readline()    # 读取一行
f.readlines() # 列表,内容是:所有的行,一行一个索引
f.tell() # 查看光标位置
f.seek(0) # 移动光标回到指定位置,以字符串个数计算
f.flush() # 刷新把内存的文件写入文件里
f.writable() # 判断是否可写
f.readable() # 判断是否可读
f.name # 打印该文件名
f.truncate() # 截断,不写参数,会清空。因为截断了0个。字符串长度
# 下面的忽略,了解即可
f.encoding # 打印该文件的编码
f.buffer #
f.errors #
f.fileno() # 返回文件的编号,
f.isatty() # 判断是否终端设备

 文件流的循环

我们上面已经知道,readlines会把一个文件流的每一行变成列表,所以我们是可以通过readlines这个方法对文件流循环的。
for
index,line in enumerate(f.readlines()): if index == 9: print('分割线'.center(100,'-')) continue print(index+1, line.rstrip())

但是,如果是readlines变成列表,如果该文件非常大,比如2G以上的内容,这样就会导致加载到内存里,导致性能下降。如果是20G,或者200G呢,直接down机。
所以,我们做文件流的循环,通常通过迭代器的方法。(加载一行,读取一行。迭代器,后面会详细详解)

由于迭代器,没有索引了。所以我们要自己做一个计数器count=0
count = 0
for line in f:
count += 1
if count == 10:
print('分割线'.center(100, '-'))
continue
print(count, line.rstrip())
  print(count, line.rstrip())

 

posted on 2020-03-01 14:07  yeyu1314  阅读(139)  评论(0编辑  收藏  举报