Python操作文件其二操作文件

二 .操作文件

文件操作主要针对字符文件(二进制文件操作后续章节介绍 ),进行文件操作需遵循 打开文件 → 操作文件 → 关闭文件 这三个步骤。

(1)打开文件

在 Python 里,我们借助 open() 函数来打开文件,其使用形式如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)  

功能与约束

  • 功能:建立程序和文件的通道,让程序获得操作文件的权限,和操作系统里手动 “打开文件” 不是一回事。
  • 约束:代码操作文件时,别同时用操作系统手动操作文件,不然容易冲突报错。

关键参数说明

 

参数说明
file要打开的文件路径(得包含完整文件名 ),数据类型是字符串。
mode文件打开模式,决定能对文件做啥操作(读、写等 ),常见模式见下表。
encoding文本模式下用,指定文件编码(像 utf-8 gbk ),二进制模式不用。
errors编码错误咋处理(比如 ignore 就是忽略错误 ),二进制模式时无效。
newline文本模式下,控制换行符咋处理(像 \n \r\n )。

 常见 mode 模式

模式描述
r只读,文件不存在就报错;存在就只能读内容。
w覆盖写,文件不存在新建;存在就清空原来内容重新写。
x创建写,文件不存在新建并写;存在就报错。
a追加写,文件不存在新建;存在就在末尾接着写。
r+读写,文件得存在,支持读和写操作。
w+读写,文件不存在新建;存在就清空,支持读和写。
a+读写,文件不存在新建;存在就末尾追加,支持读和写。

 

# 1. 打开文件(用 r 模式,只读 )
file = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
# 2. 操作文件(这里简单打印文件对象,实际要结合读/写方法 )
print(file)  
# 3. 关闭文件(释放资源 )
file.close()  

 

(2)打开模式代码示例

1. w 覆盖写模式(批量创建文件 )

for i in range(1, 101):  
    path = r"E:\书代码\第7章\数据\数据" + str(i) + ".txt"  
    f = open(path, 'w')  
    f.close()  

作用:循环 100 次,创建 数据1.txt 到 数据100.txt 这些文件。

2. x 创建写模式(得确保文件不存在 )

# 要是文件已经存在,执行会报 FileExistsError 错
for i in range(1, 101):  
    path = r"E:\书代码\第7章\数据2\数据" + str(i) + ".txt"  
    f = open(path, 'x')  
    f.close()  

# 修正:换路径/文件名重新创建
for i in range(1, 101):  
    path = r"E:\书代码\第7章\数据2\新数据" + str(i) + ".txt"  
    f = open(path, 'x')  
    f.close()  

 3. a 追加写模式(在文件末尾追加内容 )

f = open(r"E:\书代码\第7章\a.txt", 'a', encoding='utf-8')  
f.write('提高办公效率')  
f.close()  

 4. + 增加模式(和基础模式结合,扩展读写 )

# r+ 模式:支持读写
f = open(r"E:\书代码\第7章\a.txt", 'r+', encoding='utf-8')  
print(f.read())       # 读文件内容
f.write(',每日学习一个新技能')  # 写内容到文件
f.close() 

 

(3)open() 复合写法(with 语法 )

为解决 “忘记关闭文件” 问题,Python 提供 with 语法自动管理资源,用法如下: 

with open(参数) as 变量名:  
    # 操作文件(缩进里执行,结束自动关闭 )
    变量名.方法()  

 示例(读取文件内容 ):

with open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8') as f:  
    print(f.read())  

4)读取文件

得先以 读模式(像 r r+ ) 打开文件,再用下面这些方法读取内容。

1. read() 方法

语法:文件对象.read(size=-1)

  • size:选填,指定读 size 个字符;默认 -1 读全部内容。
  • 返回:字符串类型的文件内容。

示例:

# 读全部内容
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
print(f.read())  
f.close()  

# 读前 10 个字符
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
print(f.read(10))  
f.close()  

2. readline() 方法

语法:文件对象.readline(size=-1)

       功能:读一行内容size 选填,指定读该行前 size 个字符。

       返回:字符串类型的一行内容。

示例:

# 读第一行
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
print(f.readline())  
f.close()  

# 读一行前 6 个字符
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
print(f.readline(6))  
f.close() 

3. readlines() 方法

语法:文件对象.readlines(hint=-1)

  • 功能:读所有行,返回列表(每行内容是列表里的元素 );hint 选填,按字符数限制读行。
  • 返回:列表类型的文件内容。

示例:

f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
print(f.readlines())  # 读所有行,返回列表
f.close()  

4. for 循环遍历文件

逐行读文件(不用担心大文件占内存问题 ),示例:

f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')  
for line in f:  
    print(line, end='')  # end='' 取消 print 自动换行
f.close() 

(5)写入文件

得先以 写模式(像 w a w+ 等 ) 打开文件,再用下面方法写内容。

1. write() 方法

语法:文件对象.write(text)

  • text:要写入的字符串内容。
  • 返回:写入的字符数量。

示例(覆盖写 ):

f = open(r"E:\书代码\第7章\编程语言概述.txt", 'w', encoding='utf-8')  
f.write('我正在学习Python')  # 覆盖原有内容
f.close()  

2. writelines() 方法

语法:文件对象.writelines(lines)

  • lines:字符串列表(元素得是字符串 ),写入时不会自动加换行符
  • 返回:None 。

示例(处理路径转义问题 ):

# 原错误写法(路径里的 \a 会被转义 )
# f = open(r"E:\书代码\第7章\a7.txt", 'w', encoding='utf-8')  

# 修正(用 \\ 或者 / 处理路径 )
f = open(r"E:\书代码\第7章\\a7.txt", 'w', encoding='utf-8')  
ls = ['zhangsan', 'lisi', 'wangwu']  
f.writelines(ls)  # 把列表内容写入文件(没有换行 )
f.close()  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值