python文件操作

文件操作

打开、操作、关闭

#最笨的办法打开文件,没有什么实际的用处
data = open("demo_file", encoding="utf-8").read()
#打开一个文件时需要指定一个编码集
print(data)
python文件操作_第1张图片
image

image
#使用文件句柄
f = open("demo_file", encoding="utf-8")
data = f.read()
print(data)
#不能实现文件的第二次读取,因为读一次类似于指针的东西已经到达了文件尾  

需要添加模式,r表示读模式,w表示写模式,且读的模式下只能读,写的模式下只能写,这里的写是重新创建一个文件。若文件名不变会导致原有数据被覆盖,从删库到跑路。

#使用文件句柄
f = open("demo_file", 'w', encoding="utf-8")
f.write("这是覆盖文件后的操作\n")
f.write("接着上一句")

image

可见刚才的文件已经被重写了

#既想不覆盖原文件又想写那么需要换种模式,a=append追加
#但是a模式下同样也不能读
f = open("demo_file", 'a', encoding="utf-8")
f.write("这是追加文件后的操作\n")
f.write("追加又一句")
#通常是需要写文件关闭的,但是不写也不会报错,程序自动关闭
f.close()    
#读文件指定行
f = open("demo_file", 'r', encoding="utf-8")
#读一行
print(f.readline())
#读五行
for i in range(5):
    print(f.readline())
#读指定行可以采用判断的方法  
#文件循环打印
f = open("demo_file", 'r', encoding="utf-8")
#readlines的返回是一个列表,元素是每行的内容加上换行符
#不去换行符如下
for line in f.readlines():
    print(line)  
python文件操作_第2张图片
image
# 去掉换行符变得更紧凑
for line in f.readlines():
    print(line.strip())  
python文件操作_第3张图片
image

补充:

python文件操作_第4张图片
image

python文件操作_第5张图片
image

#打到第九行不打了
for index, line in enumerate(f.readlines()):
    if index == 9:
        print('--------分割线---------')
        continue
    print(line.strip())  

python文件操作_第6张图片
image

readlines这个函数将文件内容一次性读到内存中,若是文件过大则不够现实且耗费时间过长,采取其他办法,读一行内存释放一行这种

count = 0
for line in f:
    if count == 9:
        print('--------分割线---------')
        continue
    print(line)
    count += 1  

换用该方式后文件内容已经不再是列表,而变成了迭代器(之后解释),所以要自行设置计数器才能实现对打印行数的控制

f = open("demo_file", 'r', encoding="utf-8")
print(f.tell())             # 打印文件开始的位置
print(f.readline())         # 打印一行
print(f.tell())             # 记录当前位置  

image

中间有一空行可能占了部分字符

f = open("demo_file", 'r', encoding="utf-8")
print(f.tell())             # 打印文件开始的位置
print(f.read(5))            # 打印五个字符
print(f.tell())             # 记录当前位置  
image
f = open("demo_file", 'r', encoding="utf-8")
print(f.tell())             # 打印文件开始的位置
print(f.read(5))            # 打印五个字符
print(f.tell())             # 记录当前位置
print(f.seek(0))            # 回到文件开头了
print(f.readline())
python文件操作_第7张图片
image
print(f.encoding)       # 显示文件编码格式
print(f.fileno())       # 操作系统调用文件的接口编号
print(f.flush())        # 将数据实时地从缓冲区写到硬盘     
image

使用flush制作进度条:

import sys, time
for i in range(20):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(0.1)  

image

这里井号是一个个打出来的
对于文件的操作模式,还有'r+',即读写模式;'w+',即写读模式;'a+',即追加读写模式。其中用的最多的是读写模式。
'rb'二进制格式,文件以二进制编码,这种模式不能读encoding格式。在网络传输(socket)时常使用这种模式。

对文件进行改写并创建新文件

f = open("demo_file", 'r', encoding="utf-8")
f_new = open("demo_file.bak", "w", encoding="utf-8")
for line in f:
    if "第二行" in line:
        line = line.replace("第二行", "第若干行", 1)
    f_new.write(line)
f.close()
f_new.close()  

python文件操作_第8张图片
image

python文件操作_第9张图片
image

#读文件的另一种方法,完了无需关闭
with open("demo_file", 'r', encoding="utf-8") as f:
    for line in f:
        print(line)  

python书写规范有时规定一行最好不超过80个字符,with实现多个文件同时打开的时候为了看得清楚,常使用如下格式:

with open("demo_file", "r", encoding="utf-8") as f ,\
    open("demo_file2","r", encoding="utf-8") as f2:   

你可能感兴趣的:(python文件操作)