【python3的学习之路十四】IO编程

File(文件) 方法

file 对象使用 open 函数来创建

file.close()                关闭文件。关闭后文件不能再进行读写操作。
file.flush()                刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.fileno()               返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
file.isatty()                如果文件连接到一个终端设备返回 True,否则返回 False。
file.next()                  返回文件下一行。
file.read([size])            从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])        读取整行,包括 "\n" 字符。
file.readlines([sizeint])    读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
file.seek(offset[, whence])  设置文件当前位置
file.tell()                  返回文件当前位置。
file.truncate([size])        从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
file.write(str)              将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence)    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

读文件

要以读文件的模式打开一个文件对象,需要使用python内置的open()函数。

f = open(‘xxx/test.txt‘, ‘r‘)
# 标识符‘r‘表示读
f.read()
# 文件打开成功,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示
f.close()
# 调用close()方法关闭文件

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用

with open(‘xxx/test.txt‘, ‘r‘) as f:
     print(f.read())

用readline()可以每次读取一行内容,调用readline()一次读取所有内容并按行返回list

for line in f.readlines():
    print(line.strip())  # 把末尾的‘\n‘删掉

字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数

f.open(‘xxx/test.txt‘, ‘r‘, encoding = ‘GBK‘ errors = ‘ignore‘)
f.read()
# 遇到有些编码不规范的文件,可能会遇到UnicodeDecodeError,遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略

写文件

调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或者二进制文件

f = open(‘xxx/test.txt‘, ‘w‘)
f.write(‘Hello, world!‘)
f.close()

当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而实放入内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘,忘记调用close()的后果时数据可能只写了一部分到磁盘,剩下的丢失。

with open(‘xxx/test.txt‘, ‘w‘) as f:
     f.write(‘Hello, world!‘)

以’w’模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入’a’以追加(append)模式写入。

StringIO

很多时候,数据读写不一定时文件,也可以在内存中读写。StringIO就是在内存中读写str。getvalue()方法用于获得写入后的str。

from io import StringIO

f = StringIO()
f.write(‘hello‘)
f.wirte(‘ ‘)
f.write(‘world!‘)
print(f.getvalue())
# hello world!

要读取StringIO,可以用一个str初始化StringIO,然后像文件一样读取

from io import StringIO

f = StringIO(‘Hello!\nHi!\nGoodbye!‘)
while True:
     s = f.readline()
     if s == ‘‘:
        break
     print(s.strip())
# Hello!
# Hi!
# Goodbye!

bytesIO

StringIO操作的只能是str,如果要操作二进制数据,就需要使用bytesIO。

BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes。

from io import BytesIO

f = BytesIO()
f.write(‘中文‘, encode(‘UTF-8‘))
print(f.getvalue()) # b‘\xe4\xb8\xad\xe6\x96\x87‘

此时写入的不是str,而是经过UTF-8编码的bytes。

和StringIO类似,可以用一个bytes初始化BytesIO,然后像文件一样读取

from io import BytesIO

f = BytesIO(b‘\xe4\xb8\xad\xe6\x96\x87‘)
print(f.read())
b‘\xe4\xb8\xad\xe6\x96\x87‘

OS文件/目录方法

环境变量

在操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看

import os

os.name # 操作系统类型如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统
os.uname()  # 获取详细的系统信息,uname()函数在windows上不提供
os.environ  # 获取操作系统中定义的环境变量
os.environ.get(‘PATH‘) # 获取某个环境变量的值

操作文件和目录

操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中。

# 查看当前目录的绝对路径:
>>> os.path.abspath(‘.‘)
‘/Users/michael‘
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
>>> os.path.join(‘/Users/michael‘, ‘testdir‘)
‘/Users/michael/testdir‘
# 拆分文件路径
>>> os.path.split(‘/Users/michael/testdir/file.txt‘)
(‘/Users/michael/testdir‘, ‘file.txt‘)
# 获取文件扩展名
>>> os.path.splitext(‘/Users/michael/testdir/file.txt‘)
(‘/Users/michael/testdir/file.txt‘, ‘txt‘)
# 然后创建一个目录:
>>> os.mkdir(‘/Users/michael/testdir‘)
# 删掉一个目录:
>>> os.rmdir(‘/Users/michael/testdir‘)
# 对文件重命名:
>>> os.rename(‘test.txt‘, ‘test.py‘)
# 删掉文件:
>>> os.remove(‘test.py‘)

原文地址:https://www.cnblogs.com/CSgarcia/p/9706413.html

时间: 2024-10-07 08:27:50

【python3的学习之路十四】IO编程的相关文章

【python3的学习之路九】函数式编程

变量作用域 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python的作用域一共有4种,分别是: L (Local) 局部作用域 E (Enclosing) 闭包函数外的函数中 G (Global) 全局作用域 B (Built-in) 内建作用域 以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找. x = int(2.9) # 内建作用域 g_count = 0 # 全局作用域 de

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

quick-cocos2d-x 学习系列之十四 测试用例

quick-cocos2d-x 学习系列之十四 测试用例 定义变量,创建13个场景名字 local items = { "framework.helper", "framework.native", "framework.display", "framework.crypto", "framework.network", "framework.luabinding", "fra

jQuery学习之路(四)之过滤选择器

今天是第四课主要学习过滤选择器 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>lesson4 过滤选择器</title> <link rel="stylesheet" type="text/css" href="css/lesson.css" ></link>

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

Android学习路线(十四)Activity生命周期——停止和重启(Stopping and Restarting)一个Activity

先占个位置,下次翻译~ :p Properly stopping and restarting your activity is an important process in the activity lifecycle that ensures your users perceive that your app is always alive and doesn't lose their progress. There are a few of key scenarios in which

我的MYSQL学习心得(十四)

我的MYSQL学习心得(十四) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(十三) 这一篇<我的MYSQL学习心得(十四)>将会讲解MYSQL的备份和恢复