Python文件存取实战:内置方法、NumPy、OS及CSV模块详解

宋时安
宋时安
发布时间:2026-10-13 | 7人浏览过
原创

本文系统梳理Python中四种主流文件存取方式。详细解析内置open/write/read/close方法及其with语法最佳实践;介绍NumPy模块中loadtxt/savetxt处理数组数据的用法;列举os模块中文件创建、重命名、删除及底层写入操作;最后演示csv模块读写CSV文件的完整流程。涵盖参数说明、代码示例及常见错误排查,适合Python初学者及需要处理数据文件的开发者参考。

前言:

近期在深入学习TensorFlow框架时,选修课程要求任选一种框架实现MNIST手写数字识别分类。我跟随主流选择了TensorFlow框架,边学边做,利用不同的神经网络结构完成了识别分类任务。其中关键一步是将训练生成的模型进行保存,以便在后续测试阶段加载调用。联想到这种“先保存、后加载”的模式,在Python文件存取中同样常见。本文将具体介绍几种实现方式。

(注:尽管技术文章篇幅较长可能影响阅读率和互动数据,但为了记录学习过程中的笔记,方便日后查阅或供他人参考,仍决定详细整理如下内容。)

方法预览

●Python内置方法

●numpy模块方法

●os模块方法

●csv模块方法

Python内置方法

无需依赖外部库,Python内置方法即可满足文件存取需求。本节主要介绍几种内置方法的使用方式,并在末尾通过实际案例进行展示:

1、open()方法

file object = open(file_name [, access_mode][, buffering])

该方法用于按指定模式打开文件,各参数含义如下:

file_name:包含要访问的文件名的字符串值。

access_mode:决定打开文件的模式,如只读、写入、追加等。所有可选取值见完整列表。此参数非强制,默认模式为只读(r)。常用文件访问模式见下图(来源:网络)

buffering:若设为0,则无缓冲;若设为1,访问文件时按行缓冲;若设为大于1的整数,表示缓冲区的缓冲大小;若设为负值,则使用系统默认缓冲大小。

2、close()方法

fileObject.close()

File对象的close()方法会刷新缓冲区中未写入的信息并关闭文件,此后无法再写入。当文件对象的引用被重新指定给另一个文件时,Python会自动关闭之前的文件。养成使用close()方法关闭文件的习惯是良好的编程实践。

3、write ()方法

fileObject.write(string)

write()方法可将任何字符串写入已打开的文件。需注意,Python字符串可包含二进制数据,而不仅是文本。write()方法不会在字符串末尾自动添加换行符('\n');传递的参数即为要写入已打开文件的内容。

4、read () 方法

fileObject.read([count])

read()方法从已打开的文件中读取字符串。需注意,Python字符串可包含二进制数据,而不仅是文本。传递的参数为从已打开文件中读取的字节计数。该方法从文件开头开始读入,若未传入count,则尝试尽可能多地读取内容,直至文件末尾。

5、举例分析

通常建议小伙伴使用with ...as...写法,该写法在执行完代码块后会自动执行close,既简化了程序,又避免了因疏忽或其他原因造成的错误。下面给出一个实际案例。

#先用open方法打开(不存在则创建)一个文件,
#write方法写入内容,这里with写法不用手动close
#注意这里是模式‘a',意味着写入内容不覆盖已有内容
with open('test.txt','a') as file_test:
 file_test.write('小詹是个美男子!\n')
 file_test.write('请关注公众号【小詹学python】!\n') 
#注意利用read方法读取内容,模式要设置为可读模式
#read()方法不带参数,表示默认读取最长内容
with open('test.txt','r') as file_test:
 str = file_test.read()
 print(str)

输出结果会在目录下生成一个test.txt文件,并读取后输出所有内容。下图为执行三次的结果,说明模式‘a'不会覆盖已有内容(重要的事情说三遍!)

numpy模块方法

本节主要介绍numpy模块中的两个常用方法,用于保存和读取数据。

np.loadtxt(filename, dtype=int, delimiter=' ')
np.savetxt(filename, a, fmt="%d", delimiter=",")

其中,filename为要保存或读取的文件名,a为存取的内容,delimiter为分隔符号。使用方法简单,代码如下:

import numpy as np

a=np.arange(0,10,0.5).reshape(4,-1)
#改为保存为整数,以逗号分隔
np.savetxt("a.txt",a,fmt="%d",delimiter=",")
#load时也要指定为逗号分隔
b = np.loadtxt("a.txt",delimiter=",")
print('b=\n',b)

其运行结果,创建了一个名为’a.txt‘ 的文件,保存了数组,并print打印出来读取结果,如下图:

os模块方法

python中的os模块功能强大,提供了许多文件处理操作的方法。以下列举出常用的几种方法。

1、os.open()

os.open(file, flags[, mode]);

其中,参数含义为:

file -- 要打开的文件

flags -- 该参数可以是以下选项,多个使用 "|" 隔开:

  • os.O_RDONLY: 以只读的方式打开
  • os.O_WRONLY: 以只写的方式打开
  • os.O_RDWR : 以读写的方式打开
  • os.O_NONBLOCK: 打开时不阻塞
  • os.O_APPEND: 以追加的方式打开
  • os.O_CREAT: 创建并打开一个新文件
  • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
  • os.O_EXCL: 如果指定的文件存在,返回错误
  • os.O_SHLOCK: 自动获取共享锁
  • os.O_EXLOCK: 自动获取独立锁
  • os.O_DIRECT: 消除或减少缓存效果
  • os.O_FSYNC : 同步写入
  • os.O_NOFOLLOW: 不追踪软链接

2、os.rename(current_name,new_name)方法用于更改文件名称

3、os.remove(filename)方法用于删除指定文件

4、os.mkdir('newdir')方法用于创建单层目录,如果该目录已存在会抛出异常

5、os.chdir('newdir')方法用于改变当前工作目录

6、os.getcwd()方法获取当前工作目录

7、os.write(fd,str)向指定文件写入内容,注意str要转换成byte

这里注意针对内容的写入举例,注意str要转换成byte,否则会报错(a bytes-like object is required, not ‘str’)!

import os
# # 打开文件
fd = os.open("f1.txt",os.O_RDWR|os.O_CREAT)
# # 写入字符串
line = "this is xiaozhan"
b = str.encode(line)
os.write(fd,b)
# #直接写str报错:a bytes-like object is required, not ‘str'
os.close(fd)
#以可读模式打开
fd = os.open("f1.txt",os.O_RDWR)
ret = os.read(fd,16)
print(ret)
os.close(fd)
print('finish close')
# os.remove('f1.txt')

运行结果如下:

csv模块方法

和前几种方法一样,主要是读取和写入两个部分。主要依靠csv.reader(),csv.writer()和writerow()方法。和前边几种大同小异,这里直接代码中讲解基础的使用方式。

import csv

with open('l.csv', 'w',newline='') as csvfile:
 #csv.writer()方法创建
 eWriter = csv.writer(csvfile)
 #用writerow()方法逐行写入
 eWriter.writerow(['ID', '名字', '粉丝数量'])
 eWriter.writerow(['xiaoxiaozhantongxue','小詹学python',15000])
 eWriter.writerow(['xiaoxiaozhantongxue','小詹学python',15000])
 eWriter.writerow(['xiaoxiaozhantongxue','小詹学python',15000])

#打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open()
with open('l.csv','r') as csvfile:
 #读取csv文件,返回的是迭代类型
 read = csv.reader(csvfile)
 for i in read:
  print(i)

运行结果如下图:

以上就是本次整理的内容了,方便自己查阅也希望对各位读者有一丢丢用噢!文章太长,耐心看到这的,我得给你点个赞,送你一个么么哒。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对本站的支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表