管道

管道的作业在于:将前一个命令的输出,当成下一个命令的标准输入。
管道输入的语法
cmd1|cmd2|cmd3 …
Python的标准输入:sys.stdin

import sys
#sys.stdin代表系统的标准输入(键盘),它是一个类文件的对象
#遍历文件(把sys.stdin当成文件来看)的语法
for line in sys.stdin:
    print(line)

管道输入

python 管道 ls python 管道输入_文件指针


命令:

type ad.txt|python pipein_test.py

该命令使用tyoe读取ad.txt文件的内容,文件内容会作为下一条命令的输入

import sys
#sys.stdin代表系统的标准输入(键盘),它是一个类似文件的对象
#遍历文件(把sys.stdin当成文件来看)的语法
for line in sys.stdin:
    print(line)

with语句
with语句来管理资源关闭。
理解为:打开的文件放在with语句中,将会帮我们自动关闭文件

#使用with语句来关闭资源
try:
    with open("53.2.py","r",True,"UTF-8")as f:
        for line in f:
            print(line,end='')
except OSError as e:
    print("有异常",e)

with原理
使用with语句管理的资源必须是一个实现上下问管理协议(contex manage peotocol)的类,实现上下文管理协议,必须实现如下两个方法。
context_manager.enter():进入上下文管理器自动调用的方法。
contex_manager.exit(exc__type,exc_value,exc_traceback):退出上下问管理器自动调用的方法。

class FkResource:
    def __init__(self,tag):
        print('---构造方法---')
        self.tag = tag
    #进入with语句会执行该方法
    def __enter__(self):
        print('该资源的tang: ', self.tag)
        #此处返回值就是as子句中变量值
        return 'obj'
    '''
    这三个参数都代表了异常
    exc_type:异常类型
    exc_val:异常value,创建异常时传入所有参数值
    exc_tb:异常的traceback
    '''
    def __exit__(self, exc_type, exc_val, exc_traceback):
        if exc_traceback:
            print('因为异常关闭资源')
        else:
            print('程序正常结束,关闭资源')
#第一步:执行with子句后的表达式FkResource('crazyit') 
#第二步:执行__enter__方法,并将该方法的返回值赋值给as子句中的变量
#第三步:__exit__方法,在with语句块执行完成或遇到异常时自动执行。
with FkResource('crazyit') as fk:
    print("fk为:" ,fk)
    print('before')
   # rasie Exception(20,'自定义异常')
    print("after")

文件指针

文件指针用于标明文件读写的位置。

假如把文件看成一个水流,文件中每个数据(以b模式打开,每个数据就是一个字节;以普通模式打开,每个数据就是一个字符)就相当于一个水滴,而文件指针就标明了文件将读写哪个位置。

文件指针的示意

python 管道 ls python 管道输入_python_02


处理文件指针

seek(offset[,whencd]):该方法把文件指针移动到指定位置。

tell():判断文件指针的位置。

with open(“54.py”,“r”,True)as f:
#r模式打开,文件指针位于开始处
print(f.tell()) #0
#whence默认为0,从开始处开始计算移动
f.seek(3)
print(f.tell()) #3

# whence默认为0,从开始处开始计算移动
f.seek(27)
print(f.tell())  # 27
# whence默认为0,从开始处开始计算移动
f.seek(27,1)
print(f.tell())  # 51

import os
#getsize可获取文件大小
print(os.path.getsize('file_pointer.py'))
#whence为2,从结尾处开始计算移动
#offset为0、whence为2,将指针移动到文件的结尾处
f.seek(0,2)
print(f.tell())
#移动到文件结尾处前10个字节
f.seek(-10)
print(f.tell())

输出内容
write(str或bytes):输出字符串或字节串,只有以二进制模式(b模式)打开的文件才能写入字节串。
writelines(可迭代对象):输出多个字符串或多个字节串。

#二进制模式打开,文件输出,一定要w或a模式
with open("info",'wb',True)as f:
    #输出字节串
    f.write('人生苦短,我用python'.encode("UTF-8"))