Python:文件操作

Posted 白鹭洲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:文件操作相关的知识,希望对你有一定的参考价值。

Python:文件操作

open()调用的内置函数,内置函数调用的系统内部的open,一切对文件进行的操作都是基于文件句柄f1.

文件操作的步骤:

打开文件 -> 操作文件 -> 关闭文件

切记:最后要关闭文件(否则可能会有意想不到的结果)

 

打开文件

文件句柄 = open(‘文件路径‘,encoding=‘指定文件编码‘, mode=‘模式‘)

f1 = open(rd:/联系方式.txt, encoding=gbk, mode=r)    #指定绝对路径
print(f1.read())
f1.close()

f1 = open(log1, encoding=gbk, mode=r)               #相对路径是在该py文件同级目录下
print(f1.read())
f1.close()

 

为了防止忘记关闭文件,可以使用上下文管理器来打开文件

with open(‘文件路径‘,‘模式‘) as 文件句柄:

with open(log1, encoding=utf-8) as f1,    open(log2, encoding=utf-8, mode=w) as f2:
    content = f1.read()
    f2.write(content)

with open(log1, encoding=utf-8) as f1:
    print(f1.read())
    f1.close()
    pass
    with open(log1, encoding=utf-8,mode=w) as f2:
        f2.write(666)

 

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

r+,可读写文件。【可读;可写;可追加】

w+,写读


"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U


"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

 

关闭文件

文件句柄.close()

 

文件:读

#读 r
#
1 read() 全读出来 f1 = open(log1, encoding=utf-8) content = f1.read() print(content) f1.close() #2 read(n) 读一部分 f1 = open(log1, encoding=utf-8) content = f1.read(3) print(content) f1.close() f1 = open(log1, mode=rb) print(f1.read(3).decode(utf-8)) f1.close() # r 模式 read(n) n 按照字符读取。 # rb 模式 read(n) n 按照字节读取。 #3 readline() 按行读取 f1 = open(log1, encoding=utf-8) print(f1.readline()) print(f1.readline()) print(f1.readline()) f1.close() #4 readlines() 依次读取每行  f1 = open(log1, encoding=utf-8) print(f1.readlines()) f1.close() # 5 for 循环 f1 = open(log1, encoding=utf-8) for line in f1: print(line) f1.close()

 

# r+ 读写  先读后写
f1 = open(log1, encoding=utf-8, mode=r+)
print(f1.read())f1.write(‘666‘)
f1.write(a)
print(f1.read())
f1.close()

 

文件:写

# w 没有文件,新建文件写入内容
# 有原文件,先清空内容,在写入新内容。
f1 = open(log2, encoding=utf-8, mode=w)
f1.write(桃白白fdksagdfsa)
f1.close()

# 图片的读取及写入
f1 = open(1.jpg, mode=rb)
content = f1.read()

f2 = open(2.jpg, mode=wb)
f2.write(content)
f1.close()
f2.close()

# w+ 先写后读
f1 = open(log2, encoding=utf-8, mode=w+)
f1.write(两款发动机了)
f1.seek(0)
print(f1.read())
f1.close()

# 追加 a
#  a 没有文件,新建文件写入内容
f1 = open(log3, encoding=utf-8, mode=a)
# f1.write(‘alex 666‘)
f1.write(\nalex 666)
f1.close()

# a+
f1 = open(log3, encoding=utf-8, mode=a+)
f1.write(python22期)
f1.seek(0)
print(f1.read())
f1.close()

 

文件:改

操作步骤如下:

# 1,以读模式打开原文件。
# 2,以写的模式打开一个新文件。
# 3,将原文件读出按照要求修改将修改后的内容写入新文件。
# 4,删除原文件。
# 5,将新文件重命名原文件。

import os
with open(file, encoding=utf-8) as f1,    open(file.bak, encoding=utf-8, mode=w) as f2:
    old_content = f1.read()
    new_content = old_content.replace(alex, SB)
    f2.write(new_content)

os.remove(file)
os.rename(file.bak, file)

升级版本
import os
with open(file, encoding=utf-8) as f1,    open(file.bak, encoding=utf-8, mode=w) as f2:
    for line in f1:
        new_line = line.replace(SB,alex)
        f2.write(new_line)

os.remove(file)
os.rename(file.bak, file)

 

 其他操作:

# readable 是否可读
# writable 是否可写
# f1.seek(12)     #任意调整
# f1.seek(0,2)    #光标调整到最后
# f1.seek(0)      #光标调整到开头
# f1.tell()       #告诉光标的位置
# f1.truncate(3)  #按照字节对原文件进行截取 必须在a 或 a+ 模式

f1 = open(log3, encoding=utf-8, mode=a+)
# f1.write(‘python22期‘)
# print(f1.read())
print(f1.readable())
print(f1.writable())
f1.close()


f1 = open(log2, encoding=utf-8)
f1.read()
print(f1.tell())
print(f1.seek(0))
print(f1.seek(0,2))
f1.seek(12)           #任意调整
f1.seek(0,2)        #光标调整到最后
f1.seek(0)         #光标调整到开头
print(f1.tell())     #告诉光标的位置
f1.close()


f1 = open(log3, encoding=utf-8, mode=a+)
f1.truncate(3)       #按照字节对原文件进行截取 必须在a 或 a+ 模式
f1.close()

 









以上是关于Python:文件操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程