博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《python的IO编程》
阅读量:4230 次
发布时间:2019-05-26

本文共 2297 字,大约阅读时间需要 7 分钟。

前言

在磁盘上读写文件的功能是操作系统提供的,现在操作系统不允许普通程序直接操作磁盘,所以读写文件是请求操作系统打开一个文件对象(文件描述符),然后通过操作系统提供的接口对这个对象读写数据,所以使用完文件必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间打开的文件数是有限的。

文件的读写

读文件open()函数

open(name[, mode[, buffering]]) -> file object
若该路径找不到相应的文件夹,则报错:IOError
f = open(“F:/python/tian.txt”,”r”)
read() 函数,可一次读取文件的全部内容,以str的类型存在内存中
print type(f) # 文件 file
print type(f.read()) # 字符串 str

在IDE中 read() 函数读取的中文是乱码,所以需要解码。

print f.read().decode(“gbk”,”ignore”).encode(“utf-8”)

调用read()函数会一次性读取文件的全部内容,如果文件有10G,内存就爆了

所以提供:
一次读取 size 字节的内容
f.read(size)
一次读取一行的内容
f.readline()
一次读取所有的内容,但是按照行返回list
f.readlines()
如下所示:
for line in f.readlines():
print(line.strip()) # 把末尾的’\n’删掉

文件对象会占用操作系统的资源,并且操作系统同一时间打开的文件数量是有限的所以文件的相关操作完成时,需要close()

f.close()

但是,当open()报错的时候,程序跳出,则不执行close()函数,

所以可以采用try…finally函数体,无论try函数体出现什么错误都会执行finally函数体

try:    d = open("F:/python/tian.txt","r")    print d.read().decode("gbk","ignore").encode("utf-8")finally:    if d:        d.close()

python有with语句 自动帮我们调用close()函数

则使用with语句写文件是一个好函数

with open("F:/python/tian.txt","r") as h:    print h.read().decode("gbk","ignore").encode("utf-8")

python 提供一个codecs模块帮我们在读文件的时候自动转换编码,读出unicode编码

import codecswith codecs.open("F:/python/test_zhongwen.txt","r",'gbk') as f:    print f.read().encode("utf-8")

写文件,文件不存在则新建,若存在则直接写.

但是写文件时,系统不会及时的把数据写入磁盘,而是放入内存中,当系统
空闲的时候才往内存中写,只有close()的时候才会把所有的文件写入磁盘上
所以忘记close的时候,常常磁盘上数据可能写入的不完整。

f = open("F:/python/test_21.txt",'w')f.write("blwy,rzss\n")f.write('hello,world!')f.close()# 或者使用with语法with open("F:/python/test_21.txt",'w') as f:     f.write("xxxx")

文件和目录操作

提供os模块可以直接调用操作系统提供的接口函数。

import os# 查看绝对路径os.path.abspath(".")# 获得当前工作目录os.getcwd()# 将两个路径合并# 注意 linux下合并符为/  而win下合并符为\os.path.join("F:/python","write1_test.txt")# 将两个路径拆分os.path.split("F:/python/write1_test.txt")# 返回文件名字os.path.basename("F:/python/write1_test.txt")# 返回文件路径os.path.dirname("F:/python/write1_test.txt")# 直接得到文件的扩展名os.path.splitext("F:/python/write1_test.txt")# 创建目录os.mkdir("F:/python/mkdir_test")# 删除目录os.rmdir("F:/python/mkdir_test")# 创建文件f = open("F:/python/mdir_test.txt","w")f.close()# 文件改名字 old/new 都必须写完整路径(可以理解为替换)os.rename("F:/python/mdir_test.txt","F:/python/mdir.txt")# 删除文件os.remove("F:/python/python_test_workplace/mdir.txt")# 复制函数引用新的模块  shutilimport shutilshutil.copyfile("F:/python/python_test_workplace/1.txt","2.txt")

转载地址:http://sliqi.baihongyu.com/

你可能感兴趣的文章
子网划分详解与子网划分实例
查看>>
游戏通讯技术:帧同步技术
查看>>
防火墙技术指标---并发连接数/吞吐量
查看>>
V100服务器和T4服务器的性能指标
查看>>
elasticsearch 启动、停止及更改密码
查看>>
Kafka,它为什么速度会这么快?
查看>>
zookeeper安装启动的一些问题
查看>>
rabbitmq命令执行报错command not found
查看>>
rabbitmq基础知识介绍及总结
查看>>
StackOverFlow异常记录
查看>>
SpringMvc4.1:注解JsonView与泛型返回类
查看>>
SpringMVC+Mybatis+事务回滚+异常封装返回
查看>>
计算机网络实验报告(三):Cisco Packet Tracer 实验
查看>>
嵌入式系统基础学习笔记(九):基于 SPI 协议在 0.96 寸 OLED上【平滑显示汉字】及【温湿度数据采集显示】
查看>>
嵌入式系统基础学习笔记(十):
查看>>
网络通信编程学习笔记(七):Java与MQTT
查看>>
人工智能与机器学习学习笔记(二)
查看>>
Java I/O
查看>>
SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach
查看>>
Core Python Programming
查看>>