Python——文件读取与写入

一、文件打开方式

 
打开方式


指针位置


读取的文件类型


r


只读(默认模式)


指针在文件开头,文件不存在则报错


1. 默认读取文件都是ASCII编码的文本文件

2. 如果读取的文件是二进制文件,如图片,视频需要使用‘rb‘模式

3. 读取非ASCII编码的文本文件,必须 以二进制模式打开,再解码

f=open(‘E:/test.txt‘,‘rb‘)

f.read().decode(‘gbk‘)


rb


二进制格式只读


指针在文件开头,文件不存在则报错


r+


可读可写


指针在文件开头,文件不存在则报错


rb+


二进制格式可读可写


指针在文件开头,文件不存在则报错


w


只写


文件存在,则覆盖;不存在,则创建


wb


二进制格式只写


文件存在,则覆盖;不存在,则创建


w+


可读可写


文件存在,则覆盖;不存在,则创建


wb+


二进制格式可读可写


文件存在,则覆盖;不存在,则创建


a


追加


文件存在,指针在文件尾增加;不存在,则创建


ab


二进制格式追加


文件存在,指针在文件尾增加;不存在,则创建


a+


可读可写


文件存在,指针在文件尾增加;不存在,则创建


ab+_


二进制格式可读可写


文件存在,指针在文件尾增加;不存在,则创建

二、文件打开方法


举例


文件不存在


是否需要调用close()方法


注意


Python内置open函数


f=open(‘E:/test.txt‘,‘r‘)


文件不存在则会IOError


必须书写调用close()


1.文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也有限

2.当写文件时,操作系统不会立刻将数据写入磁盘,而是放内容缓存,空闲时再写入,只有调用close()方法时,操作数据才会将没有写入的数据写入磁盘。不写close()方法有可能只写了一部分数据到磁盘,剩下的数据丢失了

3.文件不存在,可以用try…finally避免,但与with比较麻烦


With语句


with open(‘E:/test.txt‘,‘r‘) as f:


文件不存在则会IOError


with语句自动调用close()方法

三、文件读写定位操作


方法


用法


注意



f.read(size)


如果没有size即f.read()一次性读取文件全部内容,返回类型str;如果有size即f.read(50)读取最多的字节内容


1.文件很小,可一次性读取,文件较大,超过内存大小,内容爆掉

2.文件过大,可用f.read(size),x为每次最多读取size字节的内容

3.如果是配置文件,调用 readlines()最方便


f.readline()


每次读取一行内容,返回类型str


f.readlines()


一次读取所有内容并按行返回list



f.write()


写文件


将字符串写入文件,如果写入结束,需要在字符串后面加上"\n"


定位


f.seek(offset,from_what)


f.seek(2,0)读取位置向后移动2个字符


from_what值为文件的开始位置,可以省略;offset为偏移量


当前位置


f.tell()


f.tell(),返回当前文件位置

 

四、读取非ASCII文件,如utf-8,gbk类型

方法1:读取时指定类型encoding=‘utf-8‘

with open(‘E:/test1.txt‘,‘r‘,encoding=‘utf-8‘) as f

print(f.read())

结果:

你好

方法2:

必须:1.以二进制模式打开,再解码

codecs模块:读文件时自动转换编码,直接读出unicode

import codecs

with codecs.open(‘E:/test.txt‘,‘rb‘,‘utf-8‘) as f:

f.read()

注意:有些编码不规范,会遇到UnicodeDecodeError,可能文件中有些非法编码的字符,遇到这种情况,可用open()函数可以接收errors参数,表示如果遇到编码错误后如何 处理,最简单方式是直接忽略f=open(‘E:/test1.txt‘,‘r‘,encoding=‘gbk‘,errors=‘ignore‘)

五、File对象的属性


f.closed


文件已关闭返回true,否则返回false


f.mode


返回被打开文件的访问模式


f.name


返回文件名称

原文地址:https://www.cnblogs.com/yezishen/p/11783587.html

时间: 2024-10-28 11:58:32

Python——文件读取与写入的相关文章

python 文件读取和写入

f = open('pyehon测试.txt');#py2里可以使用 open 或 file 方法打开文件,py3 只能使用 open. #不加参数时,open为你默认为'r',reading,只读模式,不能写入且文件必须存在,否则引发异常. data = f.read();#读取文件中的所有内容 data2=f.readline();#读取一行内容 data3=f.readlines();#把内容按行读取至一个list中 f.close(); d = open('pyehon测试2.txt',

Apache commons-io实现单文件读取和写入

Apache commons-io提供了很多类,这里只介绍FileUtils类. FileUtils类提供了一些操作文件对象的实用方法,包括文件的读取.写入.复制和比较等. 比如逐句读取和写入一个文件可以使用如下方法: File file = new File("E:/data/a.csv"); List lines = FileUtils.readLines(file,"UTF-8"); FileUtils.writeLines(file2, lines, tru

Apache commons-io实现多文件读取和写入

需求: "E:/data/"目录下有四个文件夹,如下: 每个文件夹下有几个.csv文件,如下: 将每个文件夹下的.csv文件合并成一个以该文件夹命名的.csv文件. 做法: 找到"E:/data"这个目录,循环读取目录下的四个文件夹: 针对每个文件夹,循环读取目录下的文件列表: 将读取的文件写入要合并的文件中. 代码: package com.file_readwrite; import java.io.File; import java.io.IOExceptio

Java底层代码实现单文件读取和写入(解决中文乱码问题)

需求: 将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv". 代码: public class FileOpe { public static void main(String[] args) { sigle(); } public static void sigle(){ BufferedReader bufr = null; BufferedWriter bufw = null; try {

Java底层代码实现多文件读取和写入

需求: "E:/data/"目录下有四个文件夹,如下: 每个文件夹下有几个.csv文件,如下: 将每个文件夹下的.csv文件合并成一个以该文件夹命名的.csv文件. 做法: 找到"E:/data"这个目录,循环读取目录下的四个文件夹: 针对每个文件夹,循环读取目录下的文件列表: 将读取的文件写入要合并的文件中. 代码: public class FileOperation { public static void main(String[] args) { comb

Python文件读取和数据处理

一.python文件读取 1.基本操作 读取文件信息时要注意文件编码,文件编码有UFT-8.ASCII或UTF-16等. 不过在python中最为常用的是UTF-8,所以如果不特别说明就默认UTF-8编码. 读取文件可以使用 rt 模式下的 open()函数,示例如下: #以字符串的形式读取一个文件 with open('somefile.txt', 'rt') as f: data = f.read() with open('somefile.txt', 'rt') as f: for lin

一文贯通python文件读取

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; -webkit-hyphens: auto; font: 24.0px 'Helvetica Neue'; color: #3e3e3e; -webkit-text-stroke: #3e3e3e} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; -webkit-hyphens: auto; font: 16.0px 'Helvetica Neue'; color: #8c8c8c; -w

CSharp文件读取与写入入门图解

C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似:它包括了诸如单一继承.接口.与Java几乎同样的语法和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角. 用c#来读取

练习:WinForm 对话框控件(文件读取、写入)

设计界面: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Text; namespace 对话框