python文件处理-读、写

  Python中文件处理的操作包括读、写、修改,今天我们一起来先学习下读和写操作。

一、文件的读操作

  例一:

#文件读操作

f = open(file="first_blog.txt",mode = ‘r‘,encoding=‘gbk‘)
#‘r’表示只读模式(打开仍然为文件),encoding = ‘gbk‘表示原文件的存储格式为‘gbk‘,打开时必须告诉程序将gbk转成unicode(python3编码默认Unicode)

data = f.read()  # 读取所有内容,内容是已经转换完毕的字符串

print(data)  # 打印到屏幕

f.close()#文件打开后必须关闭
‘‘‘输出:    write by congcong

Hello world!

这是我用python打开的第一个文件。

‘‘‘

  例二:

#文件二进制读模式

f = open(file="first_blog.txt",mode = ‘rb‘)
#‘rb’表示以二进制读模式(硬盘存为存的二进制打开就为二进制,并且不再需要指定编码)

data = f.read()

print(data)

f.close()

‘‘‘
输出:
    b‘write by congcong\r\n\r\nHello world!\r\n\r\n\xd5\xe2\xca\xc7\xce\xd2\xd3\xc3python\xb4\xf2\xbf\xaa\xb5\xc4\xb5\xda\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xa1\xa3\r\n\r\n‘

‘‘‘

  大家能看出例一和例二的区别吗?

  区别在于例二直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,

如果想要看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码。

  那如果我们不知道一个文件是以什么编码保存的怎么办呢?

  方式一:尝试使用各种编码方式,总有一款是的,的确可以,不过感觉傻傻的,有没有更好的方法呢?

  方法二:导入一个叫 chardet 的外部工具(首先你要联网安装,Python3安装方法命令行输入:pip3 install chardet)

import chardet
res = chardet.detect(open(‘first_blog.txt‘,mode=‘rb‘).read())
print(res)

‘‘‘
输出:
{‘encoding‘: ‘GB2312‘, ‘confidence‘: 0.99, ‘language‘: ‘Chinese‘}     # confidence 表示可信程度
‘‘‘

  例三(循环读取):

# -*- coding:utf-8 -*-

f = open("for_line.txt",mode = ‘r‘,encoding=‘gbk‘)

for line in f:  #按行读取
    print(line)

f.close()

‘‘‘
输出:
    键盘字母排序如下:

    qwertyuiop

    asdfghjkl

    zxcvbnm
‘‘‘
#中间有空行的原因:print本身有换行的特点

  注意:   

  • 文件操作时,以 “r”或“rb” 模式打开,则只能读,无法写入;
  • 硬盘上保存的文件都是某种编码的0101010,打开时需要注意:
    • rb,直接读取文件保存时原生的0101010,在Python中用字节类型表示
    • r和encoding,读取硬盘的0101010,并按照encoding指定的编码格式进行断句,再将“断句”后的每一段0101010转换成unicode的 010101010101,在Python中用字符串类型表示

二、文件的写操作

  写操作里可以分为覆盖写文件(‘w’和‘wb’)和追加写文件(‘a’和‘ab’)两大类。

  1、覆盖写文件

    示例如下:  

# -*- coding:utf-8 -*-
#特别注意当mode的模式为‘w’时,是创建新文件,当文件名与原文件相同时,原文件被清空重写
f = open("write.txt",mode = ‘w‘,encoding=‘gbk‘) #普通文件的写
f.write(‘这是第一个我用Python写的文件!‘) # 自动将写的Unicode字符串转为gbk编码的二进制串。
f.close()

f2 = open("write2.txt",mode = ‘wb‘) #以二进制写文件,主要用于视频图片等文件的传输
f2.write("这是用二进制写的第一个文件!".encode(‘gbk‘))# 二进制写必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
f2.close()  

  注意:

    文件覆盖写操作时,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。

    写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

    •   wb,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制写必须加encode()将写的Unicode
    •   w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010  

2、追加写文件

    示例如下:

#特别注意当mode的模式为‘a’时,是文件追加模式,就是接着写文件
f3 = open(‘write.txt‘,mode=‘a‘,encoding=‘gbk‘)
f3.write(‘\n这是追加的文本1!‘)  # 自动将写的Unicode字符串转为gbk编码的二进制串。

f3.write(‘\n这是追加的文本2!‘) 
f3.write(‘\n这是追加的文本3!‘)f3.close() 

f4 = open(‘write3.txt‘,mode = ‘ab‘)#以二进制追加文件,主要用于视频图片等文件的传输 f4.write(‘\n这是用二进制追加的文件!‘.encode(‘gbk‘)) # 二进制追加写也必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
f4.close()

  文件追加写操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容

  写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

    •   ab,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制追加写必须加encode()将写的unicode字符串转为指定编码的二进制串,不指定时Python3默认utf-8。
    •   a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

 三、文件的读写(r+)和写读(w+)混合模式 

  1、文件的读写(r+)

    示例如下:

#-*-coding:utf-8-*-

f = open(file=‘write.txt‘,mode=‘r+‘,encoding=‘gbk‘) # r+ 表示读写模式
print(‘读写前:\n‘,f.read())
f.write(‘这是读写模式下的内容\n‘)
f.write(‘这是读写模式下的内容\n‘)
print(‘读写后:\n‘,f.read())
f.close()
‘‘‘
读写前:
 这是第一个我用Python写的文件!
这是追加的文本1!
这是追加的文本2!
这是追加的文本3!
读写后:
‘‘‘

 注意:读写模式下只能查看之前已存在的内容,而写入的内容无法再读出来(与光标的移动有关,下一篇会细说),打开文件查看,写入的内容已经追加到了之前写的最后面。

  2、文件的写读(‘w+’,使用非常少,了解即可)

    示例如下:

# -*-coding:utf-8-*-

f = open(file=‘write.txt‘,mode=‘w+‘,encoding=‘gbk‘)
print(‘写读前:\n‘,f.read())
f.write(‘这是写读模式下的内容\n‘)
f.write(‘这是写读模式下的内容\n‘)
print(‘写读后:\n‘,f.read())
f.close()

‘‘‘
写读前:

写读后:
‘‘‘

 注意: 文件的写读模式会先清空原先文件里存在的内容,再写入你即将要写的内容,相当于覆盖写,不同在于可以查看写入的内容,

需要移动文件中光标位置。下一篇的文件常用操作方法中会细品。

  

    

  

原文地址:https://www.cnblogs.com/schut/p/8410367.html

时间: 2024-08-03 22:32:48

python文件处理-读、写的相关文章

Python 文件(读\写)操作

文件(读\写)操作 open()函数,用来打开文件,创建file对象.open(name[,mode[,buffering]])name:要打开的文件mode:是打开文件的模式(读.写.追加)buffering:是否要寄存,默认为0或者False(不寄存),1或True表示寄存(意味着使用内存来代替硬盘,让程序更快,只有使用flush或者close才会更新硬盘上的数据),如果大于1表示寄存区的缓冲大小(单位:字节),如果是负值,表示寄存区为系统默认大小. open函数中模式参数的常用量:r 读模

asp.net 文件操作小例子(创建文件夹,读,写,删)

静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; string path = Server.MapPath("") + "\\" + name; if (Directory.Exists(path)) { Response.Write("<script>alert('文件夹已存在了!');history.go(

python 文件操作读、写、追加的区别

打开文件的常用模式有: r ,只读模式[默认] w,只写模式[不可读:不存在则创建:存在则清空内容:] a, 追加模式[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+, 读写[可读,可写][可理解为先读后写,不擦除原文件内容,指针在0] w+,写读[可读,可写][可理解为先写后读,擦除原文件内容,指针在0] a+, 写读[可读,可写][不擦除原文件内容,但指针直接到最后,读取原内容先重置指针] 模式 可做操作 若文件不存在 是否覆盖 指针位置 r 只

python文件读写 - 读一个文件所有行,加工后写另一个文件

1 #Filename: file_read_and_write.py 2 #打开文件,cNames读取所有行,储存在列表中,循环对每一行在起始处加上序号1,2,3,4 3 with open(r'file/companies.txt') as f1: 4 cNames = f1.readlines() 5 for i in range(0,len(cNames)): 6 cNames[i] = str(i+1) + '.' + '' + cNames[i] 7 8 #将处理过的cNames写入

Python文件操作:文件的打开关闭读取写入

Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文件. 2.操作文件:读/写. 3.关闭文件. 操作系统中的文件默认处于存储状态,读写文件时需要请求操作系统打开一个要在当前程序操作的对象,打开不存在的文件可以创建文件.open()方法通过接收"文件路径"以及“文件打开模式”等参数来打开一个文件,并且返回文件对象.打开后的文件只能在当前程序

第八天 文件的读,写,追加,读写,写读,seek()光标的移动,修改文件以及另一种打开文件的方式

主要内容:    1.初始文件操作 2.只读( r,rb ) 3.只写( w,wb ) 4.追加( a ,ab) 5.读写( r+ ) 6.写读( w+ ) 7.追加写读 ( a+ ) 8.其他操作方法 9.文件的修改以及另一种打开文件句柄的方式 一.初始文件的操作    使用python来读写文件是非常简单的操作. 我们使用open()函数来打开?个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. 根据打开方式的不同能够执行的操作也会有相应的差异. 打开文件的方式: r,

java并发读&写文件

最近在看Brian Goetz 的<<Java并发实战>>,这本书有两个版本,电子工业出版社的译本很糟糕,建议使用机械工业出版社出版出版的书籍. 在看到第三四章的时候突然想到了多线程读写文件,同时遇到一些书中没有的问题 1, 如何保证组合对象的安全性? 2, 如何判断不变性的约束条件 3, 如何不通过synchronized关键字和锁进行同步处理? 下面是一段代码, 用来从source 读取数据,通过多线程写入target文件中 思路: 1, 如何read/write文件? 2,

ubuntukylin基础 chmod 对一个文件的所有者,用户组,其他人分别添加或删除 读 写 执行 的权限

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ 我的系统:UbuntuKylin 16.04 LTS 64bit step0: 查看指定文件的权限 step1: 减去所有者的 读 写 执行的权限 step2: 查看执行效果

02_Android写xml文件和读xml文件

?? 新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.xmldemo" a