文件的操作

1.文件操作

  使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了.

 2.r(只读)   一次性读完

  设一个变量f , f 叫文件句柄,我们通过这个句柄去操纵这个文件.例如:

f = open("文件名",mode="r",encoding="utf-8")

content = f.read()            从文件中读取到数据,交给前面的content.

print(content)

f.close()

rb  读取字节

f = open("文件名",mode="rb")

content = f.read()            rb读出来的数据是bytes类型,在rb模式下不能选择encoding字符集.

print(content)

f.close()

绝对路径:从磁盘根据目录寻找文件.

相对路径:相对于你当前文件所在的位置

  从当前文件夹找到另一个文件夹中的内容

  1.从当前文件夹出去:  ../  表示出去.

f = open("../文件夹名/文件名",mode= "r",encoding="utf-8")

content = f.read()

print(content)

f.close()

从当前文件夹向里面走:文件夹名字.

read(n) 读取n 个字符.

   f = open("文件名",mode= "r",encoding="utf-8")

c = f.read(2)       read()读取字符

print(c)

f.close()

f = open("文件名",mode="rb")

content = f.read(3)    这里读的是字节

print(content)

f.close()

readline   一行一行的读取

f = open("文件名",mode="r",encoding="utf-8")

c = f.readline()

print(c)

f.close()

换行符:

strip()可以去掉左右两端的 和空格

readlines()将每一行形成一个元素,放到一个列表中,一次读完.不建议用.

f = open("文件名",encoding="utf-8")

a = f.readlines()

for line in a:

print(line)

f = open("文件名",mode="r",encoding="utf-8")

  for line in f:          直接获取到每一行数据

    print(line)     文件句柄是一个可迭代对象

f.close()

f = open("文件名",mode="w",encoding="utf-8")

f.write("要写的内容")

f.flush()   刷新管道

f.close()

在w模式下,向文件中写入内容,这个时候会删除原文件中的内容,写入新内容.  且在w模式下去读会出错.

f = open("文件名",mode="wb")

f.write("金狮子".encode("utf-8")

f.flush()

f.close()

追加 (a,ab)

在追加模式下,我们写入的内容放在末尾.

f = open("文件名",mode="a",encoding="utf-8")

f.write("内容")

f.flush()

f.close()

读写模式(r+,r+b)

读写模式,先读后写,(正常的用法)

f = open("文件名",mode="r+",encoding="utf-8")

content = f.read()

print(content)                      先去写再去读是正常用法,写的内容会把原文件覆盖.

f.write("要写的内容")

f.flush()

f.close()

写读(w+,w+b)

先将所有的内容清空,然后写入,最后读取.但是读取的内容是空的,不常用.

追加 (a+)a+模式下,不论先读还是后读都是读取不到数据的.

f = open("文件名",mode="r+",encoding="utf-8")

content = f.read()       现在光标是在最后

f.seek(0)                移动光标   光标又重新回到起点

c = f.read()

print(content)         f.seek(0) 默认到开头

print(c)                   f.seek(3)移动的是字节单位,如果是中文移动的必须是3的倍数

   f.seek(0,2)    移动到结尾      括号中的0是表示偏移量,seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头;1表示当前位置;2表示结尾.

f = open(''文件名",mode="r+",encoding="utf-8")

f.seek(0,2)

f.write("需要写的内容")

f.seek(0)

f.read()

f.flush()

f.close()

tell()使用tell().可以帮我们获取光标在什位置

f = open("文件名","r+",encoding="utf-8")

f.seek(18)

print(f.tell())

f.read()

f.close()

f = open("文件名","r+",encoding="utf")

f.seek(9)   

f.truncate()         如果没有参数根据光标的位置,保留前面的内容,删除后面的内容.

f,truncate(9)       如果给了参数,会把文件从头到参数之间的内容保留,其他的全部删除.

f.flush()

f.close()

在r+模式下,如果读取内容,不论读取内容多少,光标显示的是多少,在写入或者操作文件的时候都是在结尾进行操作.

f = open("文件名","r+",encoding="utf-8")

f.read(2)   2个字符

print(f.tell())

f.write("内容")      这样写的内容会在最后

f.close()

with open("文件名",mode="r+",encoding="utf-8")as f:
  content = f.read()

    print(content)   这里没有写f.close()    可以不关文件,过一段时间自动关.

修改文件:

      只能将文件的内容,读取到内存中,将信息修改完毕再放到新的文件里.把新文件重命名.

import os

with open("文件名",mode="r",encoding="utf-8")as f,open("新文件名",mode="w",encoding="utf-8")as f1:

  for line in f:

    line = line.replace("修改的内容","新内容")

    f1.write(content)

os.remove("文件名")

os.rename("新文件名","文件名")

原文地址:https://www.cnblogs.com/fengkun125/p/9157610.html