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

2021-06-18 17:06

阅读:558

标签:回文   系统   when   doc   uname   sequence   bye   方法   图片   

技术分享图片

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)

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

标签:回文   系统   when   doc   uname   sequence   bye   方法   图片   

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


评论


亲,登录后才可以留言!