Python文件读写操作

Python多格式文件读写操作

1、文件操作

1.1 文件操作介绍

  • 在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作,那么作为Python爱好者的我们,必须掌握用Python语言去对本地文件进行操作

比如
在这里插入图片描述

本地文件操作步骤

  • 找到文件所在位置
  • 打开文件
  • 操作文件
  • 关闭文件

1.2 open()函数

1.2.1 open()函数语法

  • Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出
    注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)
    open(file,mode=‘r’,encoding=None) --> 打开文件
    完整语法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener:
  • **file **–> 文件路径
  • **mode **–> 操作文件模式

r --> 只读模式
w --> 写入
a --> 追加

  • encoding --> 指定文件编码

utf-8–> 当文件中文乱码时,则指定编码为utf-8解决。

只读模式r
f.readable() --> 判断是否可读,返回值为布尔
f.read(n) --> 读取全部,在python3中n为字符
f.readline() --> 逐行读取,包括\n
f.readlines() --> 读取所有,返回值为列表,包括\n
f.tell() --> 文件指针所处文件位置
mode 参数有:

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

默认为文本模式,如果要以二进制模式打开,加上 b 。
练习

  • 新建E:\just_do_it\rp_table_field.csv
  • 通过f.readlines()读取文件全部内容
  • 去掉\n换行符
  • 使用到Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格)。

rstrip()方法语法:
str.rstrip([chars])
chars – 指定删除的字符(默认为空格)
返回删除 string 字符串末尾的指定字符后生成的新字符串。

f = open('E:\\just_do_it\\rp_table_field.csv', 'r')
res = f.readlines()  # 读取csv的全部内容
lines = len(res)  # 返回文件的全部行数
print(lines)
for i in range(lines):
    res[i] = res[i].strip('\n')  # 通过for循环查找每一行的'\n'字符,并通过strip函数进行替换
print(res)
f.close()		  # 关闭文件


注意

  • r模式,当文件不存在时则报错
  • f.read() --> 读取全部
  • f.readline() -->逐行读取
  • f.readlines() -->读取全部,且为列表
  • 读取不可逆

1.2.2 只写模式w

概述:
write() 方法用于向文件中写入指定字符串。

  • 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
  • 如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。

语法

  • write() 方法语法如下:
  • fileObject.write( [ str ])

参数
str – 要写入文件的字符串。
返回值
返回的是写入的字符长度。


注意

  • w模式,当文件不存在时创建文件
  • 再次写入为覆盖
  • **f.writable() ** --> 判断是否可写
  • **f.write(str) ** --> 写入内容,返回值为写入字符串的长度
  • **f.writelines(seq) ** --> 写入多行,但需要自己添加换行符


练习
创建test.txt文件,并且写入内容

f = open('E:\\just_do_it\\test.csv', 'w')# 如果test文件存在则进行写入,如果不存在则创建test.csv文件
i=0
for i in range(10):
    res = f.write(str(i)+'\n') #增加换行符
print(res)
f.close()

1.2.2 覆盖或追加模式

注意

  • a模式,当文件不存在时创建文件
  • 再次写入为追加
    Python操作二进制
f = open('E:\\just_do_it\\test.csv', 'wb')# 如果test文件存在则进行编辑,wb以二进制格式打开一个文件只用于写入。
# 如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
i=0
for i in range(10):
    res = str(i)+'\n' #增加换行符
print(f.write(bytes(res,encoding='gbk')))
f.close()
b = b'hello world'
f = open('test5.txt','wb')
f.write(b) 
f = open('E:\\just_do_it\\test.csv', 'ab+')# 如果test文件存在则进行编辑,ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
i=0
for i in range(20):
    res = str(i)+'\n' #增加换行符
print(f.write(bytes(res,encoding='gbk')))
f.close()

1.2.3 Python操作json文件

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
json格式:’{“key”:“value”}'
使用 JSON 函数需要导入 json 库:import json

函数描述
json.dumps将 Python 对象编码成 JSON 字符串
json.loads将已编码的 JSON 字符串解码为 Python 对象

json.dumps
json.dumps 用于将 Python 对象编码成 JSON 字符串。
语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

python 原始类型向 json 类型的转化对照表:

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

练习
将{ ‘a’ : 1, ‘b’ : 2, ‘c’ : 3, ‘d’ : 4, ‘e’ : 5 }写入E:\just_do_it\test.json文件中

#!/usr/bin/python
import json
f = open('E:\\just_do_it\\test.json','a')
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] #设置一个key,value的列表
json = json.dumps(data)# 通过json.dumps把Python 对象编码成 JSON 字符串。
json = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')) # 格式化字符串
f.write(str(json)) # 通过a的方式追加json格式的字符串到test.json中
# f.write(str(json.dumps({ 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 }, sort_keys=True, indent=4, separators=(',', ': '))))
f.close()

json.dumps
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
语法

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

json 类型转换到 python 的类型对照表:

JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone


练习
读取E:\just_do_it\test1.json文件中的数据

#!/usr/bin/python
import json
f = open('E:\\just_do_it\\test1.json','r')
# data = f.write('{"a":1,"b":2,"c":3}')
# j_data = json.dumps(data,sort_keys=True, indent=4, separators=(',', ': '))
l_data = json.load(f)
j_date = json.dumps(l_data,sort_keys=True, indent=4, separators=(',', ': '))
print(j_date)
f.close()

1.2.4 f.close()操作

要注意的是,当文件打开之后,必须通过f.close()语句来关闭文件,释放资源。

try:
    f = open('test2.txt','r')
    f.read()
finally:
    if f:
        f.close()

1.2.5 with open()

with open() --> 上下文管理器
with关键字用于Python的上下文管理器机制。为了防止诸如open这一类文件打开方法在操作过程出现异常或错误,或者最后忘了执行close方法,文件非正常关闭等可能导致文件泄露、破坏的问题 。Python提供了with这个上下文管理器机制,保证文件会被正常关闭。在它的管理下,不需要再写close语句。其余操作都同open()一致。

练习

with open('Students.txt','r') as f:
    print(f.readlines())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值