Python基础之 一 文件操作

文件操作

流程:
1:打开文件,得到文件句柄并赋值给一个变量
2:通过句柄对文件进行操作
3:关闭文件

模式解释
r(读) , w(写) ,a(附加)r+(读写的读), w+(读写的写),a+(读附加的附加)

b表示以二进制模式打开文件(3.0里网络传输只能用此模式,或者视频音频等)
以上模式以二进制模式表示为:rb,wb,ab,rb+,wb+,ab+
如何将文本以二进制写入文件
f = open('file','wb')
f.write('hello world',encode()) 这里转换为二进制格式写入文件即可

U表示在读取时,可以将 自动转换为
写法:rU 或者 r+U

缓冲:
0:禁用缓冲
负数:使用系统默认缓冲
1:只缓冲1行数据
2+:指定缓冲空间大小

打开文件举例: f1=open('/tmp/passwd','r')

方法:
read(): 将文件内容以字符串形式全部读取。
readable():判断文件是否可读。
write():写文件
writeable():判断文件是否可写
flush():刷新手工将内存中的文件内容写到硬盘上

readline()用法:读取一行。
举例读取前5行:
for i in range(5):
file.readline()

readlines():将文件内容以列表形式打印(这个方法效率低对大文件)
举例打印文件前10行:
for index,line in enumerate(f.readlines()):
    if index == 9:
        break
    print(line.strip())
这种方法性能不好,不要用在大文件处理,因为会一次性读取所有文件内容。

tell(): 显示当前指针在文件中位置(字节显示)
seek(offset[whence]) 指针偏移
whence:偏移量起点
0:从文件头 (默认位置)
1:从当前位置
2:从文件尾部 例如:f1.seek(0,2)
offset:偏移数量
seekable():判断文件中的光标是否可以移动,可以返回True,否则返回False.(linux中一切皆文件,终端设备在系统里也是文件,但是光标是不可以移动的。)
encoding:打印文件的编码
errors:异常处理
fileno():返回文件句柄在内存中的编号(这个编号属于操作系统内部IO),一般不使用这个方法(忘掉它吧)。
name:调用当前文件名称
isatty():看终端设备(打印机,屏幕等终端),用于底层交互。
close(): 关闭文件
closed:判断文件是否关闭,返回(True/False)
truncate():截断,如果不带参数会清空文件。带参数如:truncate(20):表示从文件开头往后截取20个字符。需要以a模式打开文件。

注意:文件以r+模式打开文件,读取文件是按照正常方式从头开始读取,但中途写入还是会直接写到文件末尾。

打开读取文件效率最高的写法:
count = 0
for line in f:
    if count == 9:
        print('----分隔符-----')

        print(line.strip())
        continue
    print(line.strip())
    count += 1
这种方法是内存只保存一行,读取的一行覆盖上一行原理。

文件修改方法:
只有同时打开2个文件,第一个是需要读取的源文件,第二个是写入内容的新文件,过程是读取源文件每行数据,如果符合修改需求,则修改,然后将每行数据写入新文件中。

 1 src_file = open('源文件名',encoding='utf-8')
 2 dst_file = open('文件名.bak','w',encoding='utf-8')
 3 
 4 for line in src_file:
 5     if '准备修改的字符串' in line.strip():
 6         #注意:这里修改一行后一定要重新指定到一个变量
 7         line = line.replace(准备修改的字符串,替换的字符串) 
 8         print(line.strip())
 9     dst_file.write(line)
10 src_file.close()
11 dst_file.close()
View Code

with : 可以自动在with执行完后自动关闭打开的文件

with open('file1','r',encoding='utf-8') as f1 ,

       open('file2','r',encoding='utf-8') as f2:    #使用with可以同时打开多个文件功能,写法建议参考这里。

    ....

小技巧动态输出显示进度条
import sys,time
for i in range(10):
    sys.stdout.write('#') 动态输出到屏幕,不会换行
    sys.stdout.flush() 刷新屏幕,显示动态输出
    time(0.1) 为查看方便

原文地址:https://www.cnblogs.com/zy6103/p/6769752.html