python中常用的文件和目录操作(一)

1|0常用的文件操作


2|01. 打开文件


  • open,它是一个内置函数,可以直接调用
  • 语法:file object = open(file_name, [access_mode]),这里我们会创建一个file对象
  • 参数:file_name--要访问的文件名称的字符串值,access_mode--决定了打开文件的模式:只读、写入、追加等。这个参数是非强制的,默认文件访问模式为只读(r)
  • 返回值:返回一个文件对象
模 式 解释
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
r+ 打开一个文件用于读写。文件指针将会放在文件的开头
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果不存在,则创建新文件
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果不存在,则创建新文件
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的末尾。也就是说,新的内容将会被写入已有内容之后。如果该文件不存在,则创建新文件进行写入
a+ 打开一个文件用于写入。如果文件已存在,文件指针将会放在文件的末尾。文件打开时会是追加模式。如果文件不存在,则创建新文件用于读写

 

 

 

 

 

 

 

 

 

 

 

 

 

2|12. 关闭文件: file_object.close()


2|23. 文件的读写操作


read()方法:

  • read(size=-1)方法从一个打开的文件中读取一个字符串
  • 参数: size--传递你要读取的字节数,如果不传递,默认是-1,读取所有的数据,
  • 读完了之后。指针会定位到读完之后的位置
  • 返回值: size=0,返回b"",size<0,返回读取的所有的字节数,size>0,返回指定的字节数

readline()方法:

  • 从文件读取整行,包括"\n"字符
  • 参数:size--如果传递一个非负的参数,返回指定大小的字节数
  • 返回值:返回从字符串中读取的字节

readlines()方法:

  • 读取所有的行并返回字符串列表,如果碰到EOF则返回空字符串
  • 参数:无
  • 返回值:返回所有的字符串列表

write()方法:

  • write()方法可将任何一个字符串写入一个打开的文件
  • 注意:write()方法不会在字符串的结尾添加换行符("\n"),所以无法实现自动换行。需要自己手动添加"\n"来实现换行

writelines()方法:

  • 传入你要写的列表内容,就可以写入多行

2|34. 示例


假设在pycharm的工作目录下新建了一个test.txt的文本文件,由于包含中文,我们保存时设置编码为"utf-8"。文件内容如下:

name: Peter
age: 29
height: 175
weight: 70
country: 英国
hobby: play-guitar

读的方法

#open()和read()方法 fo = open("test.txt") content = fo.read() print(content) 结果: 锘縩ame: Peter age: 29 height: 175 weight: 70 country: 鑻卞浗 hobby: play-guitar 乱码了,我们可以这样解决: fo = open("test.txt", encoding="utf-8") content = fo.read() print(content) 结果: name: Peter age: 29 height: 175 weight: 70 country: 英国 hobby: play-guitar #readlines()方法 fo = open("test.txt", encoding="utf-8") lines = fo.readlines() print(lines) ['\ufeffname: Peter\n', 'age: 29\n', 'height: 175\n', 'weight: 70\n', 'country: 英国\n', 'hobby: play-guitar\n', '\n']

写的方法

write()方法:如果文件已存在,会覆盖

#write()方法 fo = open("test.txt", "w") fo.write("city: London")

fo.close() 我们打开test.txt文件会发现,文件只剩下: city: London

注意:在同一个w模式下,两次写入时,第一次写入会已经存在的内容,第二次写入不会覆盖第一次写入的内容(可以理解为指针移了)

fo = open("test.txt", "w", encoding="utf-8") fo.write("第一次写入会覆盖已经存在的内容,") fo.write("第二次写入不会覆盖第一次写入的内容")
fo.close() 结果: 第一次写入会覆盖已经存在的内容,第二次写入不会覆盖第一次写入的内容

write()无法实现自动换行,需要手动添加"\n"来实现换行

fo = open("test.txt", "w", encoding="utf-8") fo.write("第一次写入会覆盖已经存在的内容,\n") fo.write("第二次写入不会覆盖第一次写入的内容") fo.close() 结果: 第一次写入会覆盖已经存在的内容, 第二次写入不会覆盖第一次写入的内容

writelines()传递列表来写入多行,不会自动换行,需手动添加

fo = open("test.txt", "w", encoding="utf-8") fo.write("第一次写入会覆盖已经存在的内容,\n") fo.write("第二次写入不会覆盖第一次写入的内容\n") fo.writelines(["111111\n", "222222\n"]) fo.close() 结果 第一次写入会覆盖已经存在的内容, 第二次写入不会覆盖第一次写入的内容 111111 222222

追加的方法

fo = open("test.txt", "a", encoding="utf-8") fo.write("哈哈哈哈哈哈") fo.close() 结果: 第一次写入会覆盖已经存在的内容, 第二次写入不会覆盖第一次写入的内容 111111 222222 哈哈哈哈哈哈

2|45. 文件定位


tell()和seek()方法详见:【译】:文件对象的方法


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/8975964.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(345)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示