自由从何而来?从自信来,而自信则是从自律来。
先学会克制自己,用严格的日程表控制生活,才能在这种自律中不断磨练出自信。都是成年人,连最基本的行为控制都做不到,还谈什么自信,又奢谈什么自由?
Python 中有着非常多“类文件对象”。比如 io 模块内的 StringIO 对象就是其中之一。它是一种基于内存的特殊对象,拥有和文件对象几乎一致的接口设计。
StringIO
很多时候,数据读写不一定是文件,也可以在内存中读写。
StringIO顾名思义就是在内存中读写str, 能缓存则缓存,分批操作可以大大提高程序运行效率;
要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:
from io import StringIO
from io import BytesIO
# 内存中的一段区域;
tio = StringIO()
#tio = BytesIO()
tio
#-----------------
<_io.StringIO at 0x1a2957e5678>
tio.write('abcde\nxyz')
tio.readable(),tio.writable(),tio.seekable()
#--------------------------------------------------------------
(True, True, True)
tio.seek(0)
tio.read()
print('-----------------')
tio.getvalue()
#-------------------------------------------------
-----------------
'abcde\nxyz'
tio.fileno() # 存在内存中,在硬盘中没有存贮
UnsupportedOperation: fileno
tio.closed
#----------------------------
False
总结:
- 内存中,StringIO开辟的一个文本模式的buffer, 可以像文件对象一样操作它;
- 当close方法被调用的时候,这个buffer会被释放;
- getvalue()获取全部内容,跟文件指针没有关系;
BytesIO
总结:
- 内存中, BytesIO 开辟的一个二进制模式的buffer, 可以像文件对象一样操作它;
- 当close方法被调用的时候,这个buffer会被释放;
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from io import BytesIO
# BytesIO IO 写入
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
# BytesIO IO 读取
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87',)
print(f.read())
#-----------------------------------------------------------------------------------------------
b'\xe4\xb8\xad\xe6\x96\x87'
b'\xe4\xb8\xad\xe6\x96\x87'
file-like Object
类文件对象,可以像文件对象一样操作;
file-like Object 是典型的鸭子类型,open方法返回的是包括read()函数的对象,我们将包括read()对象的类统称为file-like Object,所以除了file之外,内存的字节流,网络流,自定义流只要有read()函数都可以成为file-like Object,而不用遵循继承规则。
from sys import stdout,stderr
f = stdout
print(type(f))
f.write('magedu.com')
#----------------------------------------
<class 'ipykernel.iostream.OutStream'>
magedu.com
sys\os 标准输入、输出、错误输出
os 与sys模块的官方解释如下:
操作系统:
该模块提供了使用依赖于操作系统的功能的便携式方法。
这个模块提供了一种方便的使用操作系统函数的方法。
系统相关的信息模块 import sys
sys.stdout标准输出
sys.stdin标准输入
sys.stderr错误输出
sys.stdin.readline() 从标准输入读一行
sys.stdout.write("a") 屏幕输出a
sys.exit(exit_code) 退出程序
sys.modules 是一个dictionary,表示系统中所有可用的module
sys.platform 得到运行的操作系统环境
sys.path 是一个list,指明所有查找module,package的路径.
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于替换python的运行时环境。
from sys import stdout,stderr,stdin
f = stdout
print(str(f)) # stdout.write(str(f)+ '\n')
f.write('abcde')
print()
print('123')
stderr.write('xyz')
print(stderr)
print(stdin.seekable())
#---------------------------------------------------------
<ipykernel.iostream.OutStream object at 0x000001A293EC22E8>
abcde
123
<ipykernel.iostream.OutStream object at 0x000001A293EC26A0>
True
xyz
os.path(3.4之前)
路径:Unix路径与Windows路径
将Unix路径转换成Windows路径:
os | 操作 |
---|---|
os.path.split(path) | 将path分割成目录和文件名并以元组返回 |
os.path.splittext(path) | 将path分割成目录+文件名和文件的后缀,并以元组返回 |
os.path.join(path) | 用于路径拼接,将多个路径组合后返回 |
os.path.dirname(path) | 获取当前的目录 |
os.path.realpath(_file_) | 获取文件所在完整路径 |
os.path.abspath('.') | 找linux根或盘符win |
os.mkdir(path) | 创建一个路径。 |
from os import path
p = path.join('/etc','adv','mmn')
p
#------------------------------------
'/etc\\adv\\mmn' # win和linux的路径分割符是不一样的;
# 逐级 打印目录名称 ;
from os import path
p1 = path.abspath('text.py')
print(p1,path.basename(p1))
while p1 != path.dirname(p1):
p1 = path.dirname(p1)
print(p1,path.basename(p1))
#--------------------------------------------------
C:\Users\Administrator\Desktop\mage_edu\21 Python文件IO(二)文件操作\text.py text.py
C:\Users\Administrator\Desktop\mage_edu\21 Python文件IO(二)文件操作 21 Python文件IO(二)文件操作
C:\Users\Administrator\Desktop\mage_edu mage_edu
C:\Users\Administrator\Desktop Desktop
C:\Users\Administrator Administrator
C:\Users Users
C:\
os模块的system方法
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
>>> import os
>>> os.system("echo \"Hello World\"") # 直接使用os.system调用一个echo命令
Hello World ——————> 打印命令结果
0 ——————> What's this ? 返回值?
>>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此时只打印了命令结果
>>> print val
0 ——————> 注意,此时命令正常运行时,返回值是0
>>> val = os.system("ls -al | grep \"log1\" ")
>>> print val
256 ——————> 使用os.system调用一个没有返回结果的命令,返回值为256~
笔记 | 如何在Python下调用Linux的Shell命令?
3.4版本开始
建议使用pathlib模块,提供Path对象来操作,包括目录和文件;
网友评论