StringIO和BytesIO 文件操作

作者 新城 日期 2017-08-29
StringIO和BytesIO 文件操作

StringIO

表示在内存中读写str(字符串)

1
2
3
4
5
from io import StringIO     #导入StringIO
f = StringIO() #创建StringIO对象
f.write('hello')

print(f.getvalue()) #用于获取内存中存进去的值

初始化StringIO然后进行读取

1
2
3
4
5
6
7
from io import StringIO
f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
s = f.readline()
if s == '':
break
print(s.strip())

BytesIO

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

1
2
3
4
5
from io import BytesIO
f = BytrsIO()
f.write('中文',encode('UTF-8'))

print (f.getvalue()) #输出 b'\xe4\xb8\xad\xe6\x96\x87'

写入的并非中文 而是经过UTF编码的bytesIO

初始化

1
2
3
from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
f.read() #b'\xe4\xb8\xad\xe6\x96\x87'

文件操作

如果我们要操作文件、目录,可以在命令行下面输入操作系统提供的各种命令来完成。比如dir、cp等命令。

如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操作系统提供的接口函数,
Python内置的os模块也可以直接调用操作系统提供的接口函数。

1
2
3
import os
os.name #操作系统类型
os.uname() #系统详细信息 window系统不提供 该函数与系统有关系

Linux、Unix或Mac OS X
nt 表示 window系统

环境变量

使用os.environ直接查看该系统中的环境变量
获取环境变量的值os.environ.get(‘key’)

操作文件和目录

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

查看 创建 删除

1
2
3
4
5
os.path.abspath('.')    # 当前目录绝对路径 F:\Createwj.github.io\source\python

os.path.join('/Users/michael', 'testdir') # 在某个目录下创建一个新目录
os.mkdir('/Users/michael\pythontestdir') # 创建
os.rmdir('/Users/michael/testdir') # 删除

注意:不同操作系统返回路径格式不同 尽量少用字符串拼接

对文件重命名

1
2
3
os.rename('test.txt', 'test.py')    #对文件重命名  将test.txt 文件改名为test.py

os.remove('test.py') #删掉文件

复制文件
shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,
它们可以看做是os模块的补充。

python 过滤文件

1
2
3
4
5
6
7
8
9
10
11
12
[x for x in os.listdir('.') if os.path.isdir(x)]  #列出当前文件夹下面的所有目录

for x in os.listdir('.'):
if os.path.isdir(x):
print (x)

#列出所有py文件
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

for x in os.listdir('.'):
if os.path.isfile(x) and os.path.splitext(x)[1]=='.py':
print (x)