Python中的文件操作

引言

任何编程语言都需要和文件进行交互, 文件可以作为输入, 输出, 日志, 发挥着很重要的作用.

作为主流编程语言之一的Python, 借助于多种内置或开源库, 可以读取和处理多种文件. 下面主要介绍其中几类文件的操作.

平台

  • Win10
  • Python3.6.7

txt文件

Python内置的open函数本身已经能处理不少文件类型, 不仅仅是txt, 只要选对mode, 甚至可以处理obj, yaml这类高度结构化的文件. 该函数原型为

open(name[, mode[, buffering]])
  • name: 一个包含了你要访问的文件名称的字符串值.
  • mode: mode 决定了打开文件的模式:只读, 写入, 追加等. 所有可取值见如下的完全列表. 这个参数是非强制的, 默认文件访问模式为只读r).
  • buffering: 如果 buffering 的值被设为 0, 就不会有寄存. 如果 buffering 的值取 1, 访问文件时会寄存行. 如果将 buffering 的值设为大于 1 的整数, 表明了这就是的寄存区的缓冲大小. 如果取负值, 寄存区的缓冲大小则为系统默认.

至于具体的mode对应的功能如下:

mode描述
t文本模式(默认)
x写模式,新建一个文件,如果该文件已存在则会报错
b二进制模式
+打开一个文件进行更新可读可写)
U通用换行模式(不推荐)
r以只读方式打开文件文件的指针将会放在文件的开头这是默认模式
rb以二进制格式打开一个文件用于只读, 文件指针将会放在文件的开头. 这是默认模式一般用于非文本文件如图片等
r+打开一个文件用于读写文件指针将会放在文件的开头
rb+以二进制格式打开一个文件用于读写文件指针将会放在文件的开头一般用于非文本文件如图片等
w打开一个文件只用于写入如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除如果该文件不存在,创建新文件
wb以二进制格式打开一个文件只用于写入如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除如果该文件不存在,创建新文件一般用于非文本文件如图片等
w+打开一个文件用于读写如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除如果该文件不存在,创建新文件
wb+以二进制格式打开一个文件用于读写如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除如果该文件不存在,创建新文件一般用于非文本文件如图片等
a打开一个文件用于追加如果该文件已存在,文件指针将会放在文件的结尾也就是说,新的内容将会被写入到已有内容之后如果该文件不存在,创建新文件进行写入
ab以二进制格式打开一个文件用于追加如果该文件已存在,文件指针将会放在文件的结尾也就是说,新的内容将会被写入到已有内容之后如果该文件不存在,创建新文件进行写入
a+打开一个文件用于读写如果该文件已存在,文件指针将会放在文件的结尾文件打开时会是追加模式如果该文件不存在,创建新文件用于读写
ab+以二进制格式打开一个文件用于追加如果该文件已存在,文件指针将会放在文件的结尾如果该文件不存在,创建新文件用于读写

常用的有w, w+, wb, wb+, a, a+

open函数一般是按行对文件进行读取和写入的, 因此不论是读写, 都是按行进行操作的, 因此通常会和一个for循环搭配. 如下

file = open("test.txt")
for line in file.readlines():	# 读取所有行
    print(line.split('\r'))
file.close()

需要注意的是, open不会处理每一行最后的换行符, 需要人为去给它屏蔽掉, win10下这个换行符是\r

上面的代码等价于

with open("test.txt") as file:
    for line in file.readlines():	# 读取所有行
    	print(line.split('\r'))

这样不会忘记释放file对象

yaml文件

yaml文件主要是作为工程的cfg配置文件, 给很多参数初始化赋值.

python中有一个pyyaml库, 可以实现yaml文件的读取和写入.

读取

import yaml
fs = open("test.yaml", encoding="UTF-8")
data = yaml.load(fs, Loader=yaml.FullLoader)
fs.close()

此时, test.yaml中的所有内容会以一个dict的形式存入data. 然后只要根据key去索引就可以了.

写入

with open(fail_yaml, "a+", encoding="utf-8") as f:
     out = SOME_DICT
     yaml.dump(out, f)

这里写入的mode同样由open(mode)指定, 可以是删掉已存在的内容重写, 也可以在原有的文件中新增内容.

csv文件

提到Python的文件操作怎么能不提pandas, 这是一个功能十分强大的库. 这里只简单提一下怎么读写csv文件.

读取

import pandas as pd
df = pf.read_csv("test.csv", sep=",", header=0)
df.head()
  • sep参数表示按什么字符隔开, 通常来说csv文件是用,隔开的.
  • header参数表示表头有几行, 一般来说第一行会是表头, 不需要读取的, 那么就设置header=0, 表示丢弃第一行. header=1表示丢弃前两行. 如果这个文件不存在表头, 那就设置header=None.

返回的df是一个pandas内置的DataFrame类型, 实现了和numpy的高度兼容, 甚至可以像处理数组矩阵那样去处理df

写入

df.to_csv("test.csv")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对象被抛出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值