当前位置: 首页 > news >正文

Python远程操作文件?这招不学,等于白学

记录我的 学习历程-Day08 文件的操作

文件操作的初识

用 代码对文件进行各种操作。

基本构成:

* 文件路径:path

* 打开方式:读、写、追加、读写、写读……

编码方式存在utf - 8 , gbk等 , f通过open函数打开文件 , 此文件路径为文件路径或者相对路径 , 其编码方式为指定的编码方式 , 模式为指定的模式。

把f.read()获取的内容进行格式构成, 之后运用print(), 最后将f关闭 , 对其进行关闭操作 , 是f.close()。

代码解释:

open:

​ 内置函数,open 底层调用的是操作系统的接口。

f:

变量, 那些约定俗成的变量名存在着(f1,fh,,f_h) , 此变量另外还有一个称谓, 称作文件句柄。针对文件开展的任何一种操作 , 都必须借助文件句柄加上 '.' 的这种方式。

:

​ 可以不写,如果不写,默认的编码本就是系统默认的编码。

​ : gkb

​ Linux: utf-8

​ MacOS: utf-8

mode:

​ 就是定义你的操作方式:r 为读模式。

f.read():

如果你渴望对文件展开操作, 像是去读取文件, 亦或是给文件写入内容, 诸如此类的情况, 通通都得借助文件句柄加以操控来进行。

f.colse():

​ 关闭文件。(必须关闭,否则会常驻内存。)

文件操作的三个步骤:

打开文件。

对文件句柄进行相应的操作。

关闭文件。

以读取模式, 采用utf - 8编码方式, 打开名为文件.txt的文件, 获取文件句柄, 将其赋值给变量f , 默认打开模式即为r。

经由句柄来对文件予以操作, date等于f读取的内容, 随后关闭文件f。

报错的原因:

:文件存储时与文件打开时编码本不一致。

路径分隔符产生的问题:

所采用的解决办法是, 于路径之前添加一个r, 这个r是这样的形式, r'C:\Users\\文件.txt'。

文件操作的:读

文件操作里的读, 存在四种模式, 分别是r、rb、r+、r+b , 其中r+和r+b不常被使用, rb的模式 句号。

进行操作的是并非文本类型的文件, 举例而言, 像图片、视频、音频这类文件。每一种模式存在五种方式, 分别为read()、read(n)、()、()、for。

r 模式

就只读方式去打开文件, 此文件的指针会被放置于文件的开头位置, 这属于文件所要进行操作之时极易被常用到的模式, 同时它也是默认的模式。要是一个文件并未设置mode, 那么在操作文件的时候默认会采用r模式。

举例:

首先, 将文件对象f赋值为通过打开名为文件.txt的文件, 以读取模式且编码为utf - 8而得到的结果, 接着, 把从文件对象f中读取到的内容赋值给变量msg, 最后, 关闭文件对象f。

print(msg)

read() 一次性全部读取

read() 会把文件里头的全部内容读取出来, 其存在的弊端在于, 要是文件规模很大的话, 那便会相当占用内存, 进而极易致使内存崩溃。

把f赋值为打开名为“测试”的文件, 其模式为读取模式, 编码格式为“utf - 8”, 将读取到的内容赋值给msg, 关闭f, 打印msg。

# 输出结果: 这是一行用于测试的内容,A 部分为这是第二行, B 部分为这是第三行, C 部分为这是第几行, D 部分为这是行数处于连我自己也不清楚的不知具体状态的行, 就这么地吧。

read(n) 指定读取到什么位置

在 r 模式下,n 按照字符读取

你提供的代码存在错误, 正确的应该是: f = open('测试', mode='r', ='utf-8') , msg = f.read(4) , f.close()。改写后: 打开名为测试的文件, 以读取模式并采用utf - 8编码方式, 读取四个字符存入变量msg, 之后关闭该文件。

print(msg) # 输出结果: 这是一行

() 按行读取

() 每次只读取一行,注意: ()

需要读取出来的数据, 在后面都存在一个\n, 要解决这一问题, 只借助在因读取而得出的文件后边添加一个strip()就可以了。

f.这个句子不太完整且表意不明, 不太能按照要求准确改写。请补充完整清晰的句子内容。

执行print操作, 在其中打印msg1, 接着执行print操作, 在其中打印msg2, 然后执行print操作, 在其中打印msg3, 最后执行print操作, 在其中打印msg4, 其输出结果为: 这是一行测试, A为这是第二行, B为这是第三行。

C:这是第几行

() 返回一个列表

返回一个列表, 该列表之中的每个元素, 皆是原文件的每一行, 要是文件规模很大, 占据内存, 极易导致崩盘。

f.close() # 输出结果:

引号内的内容是, “哎, 这是我也不清楚到底属于第几行的那种内容”, 引号外的内容是, “算了, 就这么着吧。”。

上边这四种情况都不太理想, 要是文件特别大, 内容极其多, 它们就特别容易把内存撑到爆掉, 所以, 我们另外还有第五种办法。

for 循环

能够借助for循环来进行读取, 文件句柄属于一个迭代器, 其具备的特点是, 每一次循环时, 仅仅在内存中占用一行的数据, 极其节省内存。

你提供的代码存在错误, 正确的代码应该是 `f = open('测试', mode='r', ='utf-8')`。

能够这样去写: print(line.strip()) #此类方式便是在逐行开展读取, 它便执行了后续的功能 '''。

请你明确一下具体需求, 这句“print(f.())”表述不太清晰, 不太清楚要怎么改写, 你可以详细说明其功能或想要达成的效果等, 以便我更准确地为你改写。

这算作一行用于测试的内容, 其中, 第一部分表述为, 这是第二行, 第二部分表述为, 这是第三行, 第三部分表述为, 这是第几行, 之后又有表述为, 这是我也不清楚是第几行, 就保持这样的状态吧。

特别注意: 读完的文件一定必须要关闭

rb 模式

rb模式, 是要以二进制格式来打开一个文件, 此文件用于只读。文件指针会被放置在文件的开头位置。要记住, 下面所讲的情况也是与此相同的, 凡是带有b的都是以二进制的格式去操作文件, 它们主要是针对非文字文件记性操作, 比如图片、音频、视频等等。

并且如果你要是带有b的模式操作文件,那么不用声明编码方式。

f1被打开, 其操作模式为读取字节模式, 读取的是名为图片.jpeg的文件, 读取后tu = f1读取到的内容, 转而f1被关闭, 最终打印tu。 # 输出结果:。

字节序为b'\xff\xd8\xff\xe0\x00\\x00\x01\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00\\x , 接着还有后续很长很多内容而此处进行了省略 , 有老长一片段了且省略不少 , 后面还有不少内容呢。

rb模式存在read read(n) (),() 以及for循环这几种方式, 此处不会逐一进行展示。

文件操作的:写

文件操作里用于写的模式会有四种, 它们分别是w、wb、w+、w+b这几种, 其中w+与w+b这两种模式通常不怎么被使用, 而wb这样一种模式。

进行操作的是并非文本类型的文件, 举例来说, 诸如图片、视频以及音频这类文件。其操作的方法是, write('要写入的内容')操作方法是这样采用write语法并传递该要用于写入的特定详细内容。

w 模式

倘若文件并不存在, 然而以w模式对文件展开操作,那么它会率先创建文件, 随后再写入内容。

你提供的代码存在错误, 括号书写不正确。正确的代码及改写如下: f = open('这是一个新创建的文件', 'w', ='utf-8'), 然后, f.write('果然是一个新创建的文件')。分开来说就是, f被赋值为打开名为这是一个新创建的文件的文件, 以写入模式, 编码为utf-8 , 接着, f写入内容果然是一个新创建的文件。

f.close()

若文件是存在着的, 借助w模式去对文件开展操作, 先是要将原文件之中的内容给清空掉, 而后再去写入新的内容。

哎, 你看, f被指派去打开一个名为这是一个新创建的文件的玩意, 并且, 指定用utf - 8作为编码方式, 同时呢采用写入模式, 接着, f去写入一段内容是这是清空后重新写入的内容。

f.close()

wb 模式

wb模式, 是要以二进制格式去打开一个文件, 且仅仅是用于写入操作的。要是该文件已然存在, 那就会打开这个文件, 并且从开头之处开始进行编辑, 这意味着原有内容将会被删除掉。倘若该文件并不存在, 那就会创建新的文件。此模式一般是用于像图片、音频、视频等这类非文本文件的。

>>举个例子 :

我先是以rb的模式, 把一个图片的全部内容, 按照bytes类型读取出来, 之后呢, 再以wb的方式, 把读取出来的所有数据, 写入到一个新文件当中, 如此这般, 我就完成了类似于进行一个图片复制的流程。具体代码如下:

首先, 把原图片以rb模式给读取出来, 接着, f等于打开名为图片.jpeg的文件, 其模式设定为rb模式, 随后, f读取该文件内容。

f.将读取出来的数据, 通过wb模式, 写入新文件, 这是第二步 , f1 = open('图片1.jpeg', mode='wb') , close() #。

f1.write() f1.close()

文件操作的:追加

也就是于文件里头增添内容。在此同样存在四种文件分类, 主要是四种模式, a模式, ab模式, a+模式, a+b模式, 而我们单单讲述着a模式。

a 模式

存在这样一种情况, 要是文件并不存在, 此时若利用a模式去操作文件, 那么就会出现这样的状况, 它会先去创建文件, 随后再写入内容。

这种写法存在错误, 正确的应该是: f = open('追加文本', 'a',='utf-8') , f.write('这个文件是没有的,我是新创建的')。

f.close()

要是文件是存在着的, 借助a模式去对文件进行操作, 如此一来它就会于文件的最后之面去追加内容的。

看起来你提供的代码存在一些错误呢。应该是`f = open('追加文本', 'a', ='utf-8')` , 为你改写如下: 将文件对象f以追加模式、编码为utf - 8打开, 之后向该文件对象f写入内容, 内容为这是己存在的文件, 我是新追加的内容。

f.close()

文件操作的其它模式

就还有一种模式没讲, 是那种带 + 号的模式。带 + 的模式是什么? + 意味着加一个功能。像刚才讲的 r 模式是只读模式, 在这种模式下, 文件句柄只能做类似 read 的读操作, 不能做write这种写操作, 那要让文件句柄既能读又能写, 该怎么做? 接下来要说的就是这样的模式: r+。

一种模式是读写模式, 它是W+写读模式, 还有一种模式是a+写读模式, 另外还有r+b这种以bytes类型的读写模式。

在这儿呢咱们只说一种, 那就是r+ , 别的大同小异, 自己练练也就行了。

打开文件的模式存在着, 默认为文本模式时, 有r, 即只读模式, 此为默认模式, 要求文件必须存在, 要是不存在的话则会抛出异常, 还有w那是只写模式, 其不可读, 若不存在则会创建, 若是存在则会清空内容。

a, 一种只具备追加写模式的情况【此模式不具备可读特性;当文件不存在时会进行创建操作;而当文件存在时只会追加内容】 #2。

我们对于非文本文件, 只能采用b模式, “b”意味着以字节的情形来操作, 而且所有文件都是采取字节的形式予以存储, 依照这种模式不用去考虑文本文件的字符编码, 不用考虑图片文件的jgp格式, 也不用考虑视频文件的avi格式。

若使用 rb 方式打开, 当以 b 方式打开之时, 所读取到的内容为字节类型, 在进行写入操作之际, 同样需要提供字节类型, 并且不能够指定编码, 另外还有 #3、‘+’模式, 此模式增添了一项功能。

r+, 进行读写操作, 其含义为可读且可写, w+, 进行写读操作, 也就是可写并且可读, a+, 同样是写读操作, 属于可写还可读, #4, 针对以bytes类型实行的操作, 涉及读写, 存在写读以及写读模式, r+b, 用于读写二者兼具, 包含可读也包含可写。

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

r+ 模式 读并追加 顺序不能错

读取并写入模式: 开启一个文件以供读取与写入, 该文件指针, 默认情况下, 将会被放置于文件的起始位置。

调用print(), 将'这是新写入的内容'写入文件操作命名为'f.write', 执行关闭文件操作命名为'f.close'。

留意: 要是你处于读写模式下, 先是进行书写, 而后再去读取, 那么文件就会出现状况, 原因在于默认光标在文件的起始位置, 倘若你率先书写, 那么所写入的内容会将原本的内容予以覆盖, 直至覆盖到你写完的内容之处, 接着在后面部分开始读取。

小总结:

​ 三个大方向:

​ 读, 四种模式: r rb r+ r+b

​ 写, 四种模式 : w,wb, w+,w+b

​ 追加 四种模式: a, ab, a+,a+b

​ 相应的功能:

针对文件句柄所开展的操作有, 实行read操作, 执行read(n)操作, 进行()操作, 开展()操作, 以及实施write()操作。

文件操作的其它功能

f.tell() 获取光标的位置 单位是:字节

请注意, 你提供的内容存在语法错误, 正确的代码应该是: f = open('测试', 'r', ='utf-8'), print(f.tell()), f.read()。改写后的句子: 打开名为测试的文件, 以读取模式并使用utf - 8编码方式打开, 输出文件指针当前位置, 读取文件内容。

将文件指针当前位置打印出来, 之后关闭文件, 原文件内容为, 这是一行测试, A 所对应的内容是这是第二行, B 对应的是这是第三行, 有一个 C 对应的是这是第几行, 还有一个 D 对应的是这是我也不知道第几行。

按照这样的状态就维持下去吧, # 输出的结果是0 # 起始的位置是122 # 结束的位置在那里。

f.seek(), 它能够对光标的位置予以调整, 要注意, 其移动的单位是byte,倘若面对的是utf-8编码的中文部分, 那么这个中文部分的字节数必须要是3的倍数, 这一点很关键, 得留意。

你提供的代码存在错误, 正确的应该是: f = open('测试', 'r', ='utf-8'), f.seek(9), 内容 = f.read()。按照要求改写应为: 开启关于 “测试” 的读取活动, 其为 utf - 8编码模式, 把读取指针移至九位置处, 进行读取内容操作。

f.close(), 而print(), # 原文件内容, 这是一行测试, A:这是第二行, B:这是第三行, C:这是第几行, D:这是我也不知道第几行。

就这么样了, # 输出是这样的结果, 行测试 A 呈现出这样的情况, 这是第二行, B 所对应的情况是这是第三行, C 的情况为这是第几行, D 的情况是这是我也不清楚到底是第几行, 就这么地吧。

f.flush() 强制刷新

这段代码存在错误, 正确的写法应该是: f = open('测试', 'w', ='utf-8') , f.write(''), 按照要求改写后为: f 通过 open 方法, 以 w 模式, 编码为 utf - 8 打开名为 测试 的文件, 之后 f 执行 write 方法写入空字符串。

f.flush() f.close()

打开文件的另一种方式(常用的是这种)

with open() as ....

好处一: 无需手动去关闭文件句柄。借助with上下文管理这般形式, 它能够自动将文件句柄予以关闭。通过open('测试'。

对于以'utf - 8'为编码, 模式为'r'打开文件并命名为f的情况, 执行打印f读取内容的操作。优点2是能够添加多个打开操作, 在一个with语句块中。

首先, 你提供的代码存在错误, 正确写法应该是`with open('测试', 'r', ='utf-8') as f`(这里调整回到正确格式)。改写后的句子: 文件句柄能通过语句对多个文件进行操作而带来多个, 测试文件以读模式且采用utf-8编码被打开时, 随着打开语句中那个被指定为f的文件句柄存在于该声明范围之中。

f1.write('')

这儿得留意一个状况, 虽说借助于with语句的形式去打开文件, 无需你亲自去做关闭文件句柄这个动作, 相对来讲较为省事, 不过依赖它来自动关闭文件句柄是存在一定时段的, 而这段时间并非固定不变的, 于是在此处便会引发某些问题, 要是你于with语句里凭借r模式去打开t1文件, 那么当你在后续再以a模式去打开t1文件时, 此刻极有可能在你第二次打开t1文件之际, 第一次打开时的文件句柄尚未被关闭掉, 进而或许就会出现差错, 其针对该情况的解决办法必须是在你第二次打开此文件之前, 手动去关闭上一回打开的文件句柄。

文件的修改

存放于硬盘上的是文件的数据, 所以只存在着覆盖这种情况, 不存在修改这一说法, 我们平时所看到的修改文件, 那都是模拟出来的效果, 详细来讲有两种实现方式:

文件操作改的流程:

1,以读的模式打开原文件。

2,以写的模式创建一个新文件。

3,将原文件的内容读出来修改成新内容,写入新文件。

4,将原文件删除。

5,将新文件重命名成原文件。

方式一: 把硬盘所存该文件的全部内容加载至内存,内存里是能够修改的, 修改完后, 再从内存覆盖到硬盘(如word, vim, ++这类编辑器)。

在以'utf - 8'编码方式, 模式设定为'w'的情况下创建一个名为f2的对象, 将f1所读取的内容进行赋值操作, 这里是全部读入内存, 要是文件规模很大, 会出现卡死的情况。

这是一段代码, 它进行了这样的操作, 首先有一个等于号, 后面跟着一个点, 点后面是一对单引号括起来的文和wen, 这是在内存中完成修改的一种形式呢, 然后是f2.write这部分代码执行相应操作。

对新文件进行一次性写入操作时候, 使用os.('测试') , 删除原文件的时候, 使用os.('测试.bak', '测试') , 把新建的文件重命名为原文件。

那个原文件所具备的内容是这样的, 有着关于文件操作更改的流程: 其一, 要以读的那种模式去把原文件给打开。其二, 要以写的那种模式去创建出一个新的文件。其三, 要把原文件之中的内容给读出来, 并且修改成为新的内容, 之后写入到新文件里面。

把原文件从中删除掉, 把新文件重新命名为原文件, 文件操作更改的流程是, 以读的模式将原文件打开。

2, 通过以写的样式去创建一个全新的wen件。3, 把原有的wen对应的材料读出来, 改变成为新的内容, 然后写进新的wen件里面。4, 把原来的wen件给拿掉。5, 把新的wen件重新取一个名字, 让它成为原wen件。

方式之二: 将于硬盘存放着的那个文件的内容, 逐行往内存里读取, 于修改完毕之后, 就把其写入到新的文件之中, 最终借助新文件去覆盖源文件(此乃是较为常用的)。

这看起来不像是一个完整且正确的代码片段呀, 你提供的内容存在格式错误, 不太能按照要求准确改写。请检查并提供正确完整的内容以便进行改写。

=(以'utf - 8'编码, 模式为'w'打开文件, 命名为f2), 对于f1中的每一行: (进行逐行修改, 这种方式占内存较少) =。

所提供的内容似乎并非完整且正确的代码语句表述, 存在一些不明确和错误的地方, 难以按照要求准确改写。请提供完整、准确的内容以便能进行有效改写。

流程是将原wen件操作进行更改: 首先, 把原wen件以读这种模式去打开;其次, 要创建一个新wen件通过写该模式。

3, 把原文件那里边的内容给读出来, 然后修改成为新的内容, 写完之后写到那个新文件里头。4, 把原文件给删除了。5, 把新文件重新给命名成原文件的名字。 # 修改后的内容。

涉及文件操作更改的流程, 其一, 是以读的模式去打开原本的文件。其二, 是以写的模式去创建一个全新的文件。其三, 将原本文件之中的内容读取出来, 把它修改成为新的内容并且写入这个新文件。其四, 把原本的文件进行删除。

http://www.cnnetsun.cn/news/3322272.html

相关文章:

  • 生产环境部署:immutable在微服务架构中的最佳实践
  • 0 基础入门React Native鸿蒙跨平台开发:速度单位换算器实战
  • pz 高级用法:如何利用自动导入功能简化复杂的数据处理任务
  • minimal-json并发处理最佳实践:线程安全与性能平衡指南
  • 5分钟解决字体焦虑:M+ FONTS让你的设计从此告别选择困难
  • Havenlon|历史中的执行控制(五):珍珠港——静默、误判与执行窗口的不可逆性
  • 99.3.智能门禁-人脸+播报-基于STM32单片机物联网设计【硬件+APP+云平台】
  • 订单自动化革命已爆发,你的团队还在人工核单?AI Agent订单处理效率提升470%,限时开放3套行业适配模板
  • 公开全项目关键词,豆包 AI + 人工双重验证护航:上市公司数字化无形资产占比 2007-2024
  • 从业务对象到可恢复编辑现场,完整理解 SAP Fiori 事务应用的 Draft 开发
  • CCManager与Devcontainer无缝集成:打造安全隔离的AI开发环境
  • 【RK3506】3、通过sysfs控制GPIO与PWM子系统
  • 土木工程论文降AI工具免费推荐:2026年土木工程毕业论文AIGC超标4.8元知网达标完整方案
  • 如何用嘎嘎降AI处理会计学论文:会计学毕业论文降AI4.8元知网达标完整教程
  • 如何用嘎嘎降AI处理土木工程论文:土木工程毕业论文降AI4.8元知网维普达标完整教程
  • 从HIS到PACS:积水潭贵州医院全业务国产化适配SpringBoot实战
  • Android Gradle 多模块重构:移动目录后 2 种 settings.gradle 配置修复方案对比
  • STM32F407寄存器点灯
  • 华为OD机试真题 新系统 2026-07-05 PythonJS 实现【二叉树两节点间的最小跳数】
  • 高性能单线程异步架构设计:ET框架核心技术深度解析与性能优化实战
  • maldev 终极指南:恶意软件开发技术深度解析与实践教程
  • 软件测试入门——第三十六课(性能测试之从用例设计到执行落地的完整方法论)
  • Claude 与 ChatGPT:哪个更适合科研和学术写作,深入对比分析
  • 【HarmonyOS】List组件多层对象嵌套ForEach渲染更新完全指南(@Observed、@ObjectLink、@State、Array刷新原理
  • 从“等客进店”到“上门成交”:服装门店移动POS离店收银的完整业务流程2026
  • 如何用Tabby的分屏和SSH功能实现高效多任务终端管理:完整指南
  • AI编程与低代码平台有什么区别?2026年企业如何选择AI开发工具
  • 工业具身智能开启从技术验证向场景落地的进阶
  • mac玩超级变色龙的方法 mac怎么玩超级变色龙
  • IbPy终极指南:如何快速连接TWS实现Python程序化交易