python文件操作知识

news2025/2/23 23:10:35

【一】操作流程:

  1. 打开文件,得到一个文件句柄(对象),赋给一个对象。
  2. 通过文件句柄对文件进行操作。
  3. 关闭文件。

【 二 】 使用方法

open(路径 + 文件名,读写模式)

如下:

f = open("1.txt","a")
f.write("8")
f.write("9\n")
f.close()

使用追加的方式打开1.txt 赋值给f,追加89 然后关闭文件

with的作用

with open(file) as f:
    #对f进行文件操作

相当于

f = open(file)
#对f进行文件操作
f.close()

或者更严格的,相当于

f = open(file)
try:
    #对f进行文件操作
finally:
    f.close()
  • with相当于一个智能化的'='赋值方法,其可以在最后来自动的关闭文件。
  • 即使对文件f的操作报错,文件操作未进行,with可以仍然使得文件关闭。

【 三 】常用模式有:

1.打开文件的模式有(默认为文本模式):

r 只读模式【默认模式,文件必须存在,不存在则抛出异常】
w 只写模式【不可读;不存在则创建;存在则清空内容在写入】
a 只追加写模式【不可读;不存在则创建;存在则只追加内容】

2.对于非文本文件,我们只能使用b模式。

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码。

rb 以二进制读取
wb 以二进制写入
ab 以二进制追加

3.‘+’模式(就是增加了一个功能)

r+ 读写【可读,可写】
w+ 写读【可写,可读】
a+ 写读【可写,可读】

4.以bytes类型操作的读写,写读,写读模式

r+b 读写【可读,可写】
w+b 写读【可写,可读】
a+b 写读【可写,可读】

5.关于r+模式:打开一个文件用于读写,文件指针默认将会放在文件的开头。

注意:如果在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会将原内容覆盖掉,直到覆盖到你写完的内容,然后在从后面开始读取。

# 文件'其他模式'中的内容是:王副班最帅

# 1. 先读后写
f1 = open('其他模式', encoding='utf-8', mode='r+')
content = f1.read()
print(content)
f1.write('王强强')
f1.close()

3 2. 先写后读(错误实例)
f1 = open('其他模式', encoding='utf-8', mode='r+')
f1.write('王强强')
content = f1.read()
print(content)  # 最帅
f1.close()

【 四 】文件创建:

(1)使用open函数

        Python内置了一个名为open的函数,它可以用于创建、打开和修改文件。

        使用"new_file.txt"作为文件名,并使用"w"作为访问模式。其中,"w"代表写入模式,它会创建一个新文件,并允许写入内容。

(2)使用with关键字

        在使用open函数创建文件时,我们需要手动关闭文件,以确保资源得到释放。为了简化这个过程,Python提供了一个更好的方式,即使用with关键字。示例如下:

with open("new_file.txt", "w") as file:
    # 在这里进行文件操作
    data = file.write('name is age 18')
    pass

( 3 )文件不存在时创建文件

import os
file_path = "new.txt"
if not os.path.exists(file_path):
    open(file_path, "w").close()
    print(f"文件 {file_path} 创建成功")
else:
    print(f"文件 {file_path} 已存在")

【 四 】读文件

( 1 ) open()方法读取

file = open('1.txt', 'r')
# 在此处进行文件读取操作
file.close()

( 2 )with语句读取 

 

with open('1.txt', 'r') as file:

content = file.read()

print(content)

 ( 3 )read()方法

        read()方法用于读取整个文件的内容,并将其存储为一个字符串。例如,要读取名为'file.txt'的文件的所有内容,可以使用以下代码:

file = open('1.txt', 'r')

content = file.read()

print(content)

 ( 5 ) readlines())方法

        readlines()方法用于读取整个文件的内容,并将其存储为一个列表,列表中的每个元素表示文件中的一行。例如,要读取名为'file.txt'的文件的所有内容,可以使用以下代码:

file = open('1.txt', 'r')

lines = file.readlines()

for line in lines:

print(line)

 

(6) readline()方法

        readline()方法用于读取文件的一行内容,并将其存储为一个字符串。每次调用readline()方法会读取文件中的下一行内容。例如,要读取名为'file.txt'的文件的第一行内容,可以使用以下代码:

file = open('1.txt', 'r')

line = file.readline()

print(line)

【 五 】写文件

(1) 写入文件时的不同模式

  • 覆盖模式(“w”):打开文件并将内容写入文件,如果文件存在,则覆盖原有内容。如果文件不存在则创建一个新的文件。
  • 追加模式(“a”):打开文件并将内容写入文件,如果文件存在,则在文件末尾添加内容。如果文件不存在则创建一个新的文件。
  • 读写模式(“r+”):打开文件供读取和写入,如果文件存在,则覆盖原有内容。如果文件不存在,将抛出FileNotFoundError异常。

(2)写入字符串数据

# 写入字符串数据
with open("1.txt", "w") as file:
    file.write("Hello, World!\n")
    file.write("This is a new line.")

(3)写入字节数据

  • 使用write()方法将字节数据写入文件。
  • 可以使用encode()方法将字符串转换为字节数据进行写入。
# 写入字节数据
with open("1.txt", "wb") as file:
    content = "Hello, World!\n"
    file.write(content.encode("utf-8"))

(4)writelines()

        写入list内容,不会在元素之间自动添加换行符。

【 六】总结文件中的一些操作方法

f.read([size])                    #size为读取的长度,以byte为单位

f.readline([size])              #读一行,如果定义了size,有可能返回的只是一行的一部分

f.readlines([size])            #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

f.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符

f.writelines(seq)             #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西,包括换行符。

f.close()                          #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

f.flush()                        #把缓冲区的内容写入硬盘

f.fileno()                      #返回一个长整型的”文件标签“

f.isatty()                      #文件是否是一个终端设备文件(unix系统中的)

f.tell()                         #返回文件操作标记的当前位置,以文件的开头为原点

f.next()                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

f.seek(offset[,whence])    #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

f.truncate([size])              #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

【七】 文件的读写模式

 

【 八 】指针定位

tell() 方法用来显示当前指针的位置。

f = open('test.txt')
print(f.read(10))  # read 指定读取的字节数
print(f.tell())    # tell()方法显示当前文件指针所在的文字
f.close()

seek(offset,whence)方法用来重新设定指针的位置。

  • offset:表示偏移量
  • whence:只能传入012中的一个数字。
    • 0表示从文件头开始
    • 1表示从当前位置开始
    • 2 表示从文件的末尾开始
f = open('test.txt','rb')  # 需要指定打开模式为rb,只读二进制模式

print(f.read(3))
print(f.tell())

f.seek(2,0)   # 从文件的开头开始,跳过两个字节
print(f.read())

f.seek(1,1) # 从当前位置开始,跳过一个字节
print(f.read())

f.seek(-4,2) # 从文件末尾开始,往前跳过四个字节
print(f.read())

f.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty02-基础概念

什么是netty ​ Netty是一个基于Java NIO的异步事件驱动网络应用程序框架。它提供了简单易用的API,用于快速开发可维护的高性能网络应用程序。Netty的设计目标是提供一种高度可扩展的、高性能的网络应用程序框架,使得开发人员能够轻松地构建各种类型的网…

unity | 动画模块之循环滚动选项框

一、作者的话 评论区有人问,有没有竖排循环轮播选项框,我就写了一个 二、效果动画 如果不是你们想要的,就省的你们继续往下看了 三、制作思路 把移动分成里面的方块,还有背景(父物体),方块自…

基于 springboot + vue 健身房管理系统 毕业设计-附源码

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

AI交互数字人如何成为古镇文化传播者?

近日,南浔古镇出现了5位数字人,将古镇文化与数字人相结合,实现旅游营销的创新尝试。数字人不仅可以作为南浔古镇的品牌形象,还可以作为南浔古镇的文化传播者,化身AI交互数字人与游客互动交流,讲述南浔古镇的…

安全AI系统开发指南

执行摘要 本文件建议为使用人工智能(AI)的任何系统的提供商提供指导方针,无论这些系统是从头开始创建的,还是建立在他人提供的工具和服务之上的。实施这些指导方针将有助于提供商构建按预期运行、在需要时可用的人工智能系统&…

基因组注释流程

一边学习,一边总结,一边分享! 详细教程请访问: 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目:Genomic insights into local adaptation and future climate-induced vu…

2023Q4 私有化版本发布,和鲸 ModelWhale 持续赋能大科研、高校教改的 AI for Science

作为数据科学多人协同平台,和鲸 ModelWhale 从一而终地为各级用户提供完备而周全的解决方案,覆盖数据研究、算法探索、模型调优、Python 案例教学等多个场景。特别地,如果对研究分析平台有更高的安全合规要求、希望兼容原有业务系统&#xff…

自定义构建jdk镜像

(1)准备jdk压缩包、创建Dockerfile文件 jdk压缩包、Dockerfile文件在同一目录,如下 Dockerfile文件内容如下 # 指定基础镜像 FROM centos:latest # 作者和电子邮件 MAINTAINER vinegar93 "vinegar93163.com" # 指定工作目录 WORK…

【JavaScript手撕代码】浅拷贝的五种实现

目录 Object.assign扩展运算符数组方法slice()concat 手写 Object.assign ES6提供的方法,接收多个参数,第一个参数是目标对象,后面的参数是源对象 ,这个API将源对象复制到目标对象上,但是注意: 若源对象和…

StarGAN 使用指南:一个模型实现多个域的迁移

StarGAN 使用指南 网络结构多数据集训练使用指南StarGAN v2 论文地址:https://arxiv.org/pdf/1711.09020.pdf 我们有猫的图片集、狗的图片集和兔子的图片集。 目标是让猫的图片看起来像狗的图片,狗的图片看起来像兔子的图片,兔子的图片看起…

CUDA简介——CUDA内存模式

1. 引言 前序博客: CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化CUDA简介——Grid和Block内Thread索引 CUDA内存模式,采用分层设计,是CUDA程序与正常C程序的最大不同之处: Thread-Memory Correspondenc…

Linux信息收集

Linux信息收集 本机基本信息 #管理员 $普通用户 之前表示登录的用户名称,之后表示主机名,再之后表示当前所在目录 / 表示根目录 ~表示当前用户家目录1、内核,操作系统和设备信息 uname -a 打印所有可用的系统信息 uname -r 内核版本 u…

每日一题 2477. 到达首都的最少油耗(中等,树)

去参加CCF软件大会,好多天没做每日一题了 我的思路: 看到题目是一个由叶子节点向根节点汇聚的过程,就想到拓扑排序每次移动都只将叶子节点向前移动一格,并删除它,此时移动的目标节点数量加一,并根据该叶子…

vue创建项目,使用可视化界面安装插件

安装项目: vue create vue-app 选择默认配置就行,也可以按需选择自定义配置 vue ui通过可视化管理项目 通过可视化安装全家桶插件

文件重命名:删除文件名中的空格,提高文件可读性和可管理性的方法

在计算机科学中,有效的文件管理对于提高工作效率和保持数据的一致性至关重要。工作中经常会遇到文件名中包含空格的情况,这不仅会使文件在某些情况下难以读取,而且可能导致管理上的困扰。在文件名中添加空格可能会使文件名变得模糊和不明确&a…

批量创建/更新外协工序采购信息记录

批量创建/更新没有物料号的外协工序采购信息记录。 执行事务代码ZME1X_OP,下载模板。(此程序可同时用于外协工序的创建和修改)创建外协工序的时候如果是新建则不需要输入采购信息记录号,如果是要更新外协工序价格,则必须输入采购信息记录号。价格单位默认为‘1’,货币代码…

Flannel源码解析

Flannel源码解析 项目地址: https://github.com/flannel-io/flannel 更多文章访问 https://www.cyisme.top flannel中有三种工作模式: udp。 性能最低,利用tun/tap设备,通过udp封装ip包。中间需要经过多次内核态和用户态的切换。vxlan。 性能中等&…

JavaWeb(六)

一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包,在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…

【希尔排序和直接插入排序】

文章目录 一. 直接插入排序代码实现:过程思想:性能分析: 希尔排序基本思想:代码实现:特性总结:希尔排序由于gap的取值有很多方法和组,导致没有一定规律去计算,因此目前为止众多大佬通过大量实验证明例如,Kn…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言,天然存在跨平台的属性,我们在编译完成后,可以再不暴露源代码的情况下,运行在对应的平台中,但是 还是架不住有逆向工程师的反编译、反汇编的情形;(当然我们写的都不希望被别人偷了…