Python常用标准库之sys

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python常用标准库之sys相关的知识,希望对你有一定的参考价值。

参考技术A

sys模块主要是针对与Python解释器相关的变量和方法,不是主机操作系统。
导入方式: import sys

sys.argv是一个脚本执行参数列表,列表的第一个元素是脚本名称,从第二个元素开始才是真正的参数。

path是一个目录列表,供Python从中查找模块。在Python启动时,sys.path根据内建规则和PYTHONPATH变量进行初始化。sys.path的第一个元素通常是个空字符串,表示当前目录。

sys.path本质上是一个列表,可以进行append、insert、pop、remove等各种列表相关的操作,但通常都进行append操作,添加自己想要的查找路径。

stdin 用于所有的交互式输入(包括input()函数)。
stdout 用于print()的打印输出或者input()函数的提示符。
stderr 用于解释器自己的提示信息和错误信息。

简而言之,这三个属性就是操作系统的标准输入、输出和错误流,它们返回的都是一个“文件类型”对象,支持read()、write()和flush()等操作,就像用open()方法打开的文件对象那样!

当我们用 input(\'Please input something!\') 时,事实上是先输出提示信息,然后捕获输入。 以下两组等价:

当我们 print(obj) 的时候,事实上是调用了 sys.stdout.write(obj+\'\\n\') ,将内容打印到控制台(默认是显示器),然后追加一个换行符。以下两行等价:

默认情况下 sys.stdout 指向控制台。如果把文件对象赋值给 sys.stdout ,那么 print () 调用的就是文件对象的 write() 方法。

如果你还想同时在控制台打印的话,最好先将原始的控制台对象引用保存下来,向文件中打印之后再恢复 sys.stdout .

参考:

Python常用标准库之fileinput

Python常用标准库之fileinput

 
技术图片

fileinput模块用于对标准输入或多个文件进行逐行遍历。这个模块的使用非常简单,相比open()方法批量处理文件,fileinput模块可以对文件、行号进行一定的控制。
典型的用法:

import fileinput

for line in fileinput.input():
    process(line)

如果代码中没有指定操作的文件对象,则默认是从stdin获得的sys.argv[1:]中的参数。

基本方法

fileinput.input(files=None, inplace=False, backup=‘‘, bufsize=0, mode=‘r‘, openhook=None)

创建并返回一个FileInput类的实例。files指定要处理的文件,可以是一个多元元组,表示按顺序批量处理元组内文件。inplace参数最关键,可设置是否对源文件进行修改;backup则用于指定对源文件进行备份的后缀名;mode用于指定文件读写方式,和open()方法的定义一样, 默认为只读‘r’。同样的,fileinput.input()方法也可以作为一个上下文管理器使用,如下所示:

with fileinput.input(files=(‘spam.txt‘, ‘eggs.txt‘)) as f:
    for line in f:
        process(line)

这将保证input会在with语句结束之后被关闭,无论期间是否抛出过异常,确保文件安全。

主要属性

fileinput.filename()
返回当前正在处理的文件名(也就是包含了当前正在处理的文本行的文件)
fileinput.fileno()
返回当前文件的总行数。
fileinput.lineno()
返回当前的行数,这个行数是累计的。多个文件的行数会累加起来。
fileinput.filelineno()
返回当前正在处理的文件的当前行数。每次处理完一个文件并开始处理下一个文件时,该值会重置为1,重新开始计数。
fileinput.isfirstline()
当前行是当前文件的第一行时返回True,否则False.
fileinput.isstdin()
当前操作对象为sys.stdin时返回True否则False。
fileinput.nextfile()
关闭当前的文件,跳到下一个文件,跳过的行不计数。
fileinput.close()
关闭整个文件链,结束迭代。

示例

现在有一个1.txt文件,内容如下:

愿圣光与你同在!

为了部落!

兽人永不为奴!

你们这是自寻死路!

复活吧我的勇士!

为你而战我的女士!

然后为每一行添加“#行号”。

import fileinput

with fileinput.input(files="d:\1.txt") as f:

    for line in f:
        line = line.rstrip()
        num = fileinput.lineno()
        print("#%d	%s" % (num, line))

#输出结果
#1  愿圣光与你同在!
#2  
#3  为了部落!
#4  
#5  兽人永不为奴!
#6  
#7  你们这是自寻死路!
#8  
#9  复活吧我的勇士!
#10 
#11 为你而战我的女士!

如果你想同步修改源文件,添加inplace=True参数即可,但一定要小心,请确认自己的行为,防止误操作!

参考:

转载内容,仅为个人学习使用,如有侵权,请联系删之。

以上是关于Python常用标准库之sys的主要内容,如果未能解决你的问题,请参考以下文章

Python常用标准库之sys

Python标准库之sys模块

python标准库之sys模块 学习

Python标准库之Sys模块使用详解

标准库举例:syscopy

标准库举例:syscopy