python fileinput_Python之fileinput模块学习「建议收藏」

python fileinput_Python之fileinput模块学习「建议收藏」fileinput模块fileinput.input([files[,inplace[,backup[,bufsize[,mode[,openhook]]]]]])files:#文件的路径列表,默认是stdin方式,多文件[‘1.txt’,’2.txt’,…]inplace:#是否将标准输出的结果写回文件,默认不取代…

大家好,又见面了,我是你们的朋友全栈君。

fileinput模块

fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])

files:                  #文件的路径列表,默认是stdin方式,多文件[‘1.txt’,’2.txt’,…]

inplace:                #是否将标准输出的结果写回文件,默认不取代

backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。

bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可

mode:                   #读写模式,默认为只读

openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;

fileinput模块提供处理一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行。

它的工作方式和readlines很类似,不同点在于它不是将全部的行读到列表中而是创建了一个xreadlines对象。

关键在这句话:标准输出会被重定向到打开文件

所以一定要用print打印到标准输出,fileinput会自动把标准输出内容回写到文件,如果没有用print打印到标准输出,那么就会把空内容回写到文件,也就是清除了文件所有内容

print re_basedir.sub(‘basedir=/usr/local/mysql’, line) ,

下面是fileinput模块中的常用函数:

input()    #返回能够用于for循环遍历的对象

filename()  #返回当前文件的名称

lineno()   #返回当前已经读取的行的数量(或者序号)

filelineno() #返回当前读取的行的行号

isfirstline() #检查当前行是否是文件的第一行

示例

#如果要修改多个地方,将sub()得到的结果代入第二个sub()函数再print出来

def modify_startupscript(port):

for line in fileinput.input(MYSQL_STARTUP_SCRIPT,inplace=1):

re_datadir = re.compile(r’datadir=’, re.I | re.M)

content= re_datadir.sub(‘datadir=/data/mysql/mysql%s/data’ %port, line)

re_basedir = re.compile(r’basedir=’, re.I | re.M)

print re_basedir.sub(‘basedir=/usr/local/mysql’, content) ,

fileinput.close()

示例#!/usr/bin/env python

import fileinput

for line in fileinput.input(‘test.txt’,backup=’.bak’,inplace=1):

print line.replace(‘Python’,’LinuxEye’),

fileinput.close()

示例

判断是否是第一行import fileinput

for line in fileinput.input(‘test.txt’):

if fileinput.isfirstline():

print line,

else:

break

fileinput.close()

示例import fileinput

from glob import glob

for line in fileinput.input(glob(r’d:/*.txt’)):

print fileinput.lineno(), u’文件:’, fileinput.filename(), /

u’行号:’, fileinput.filelineno(), u’长度:’, len(line.strip(‘/n’))

fileinput.close()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146020.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea文本替换快捷键_idea中替换单词

    idea文本替换快捷键_idea中替换单词废话不多说,直接上干货:Edit–Find–ReplaceinPath示例,可以一个个的点击replace替换,也可以点击replaceall一次性全部替换,查找的时候可以匹配大小写,英文可以全词匹配替换的范围可以是整个项目||项目中的某个模块||某个目录等…

    2022年9月29日
    6
  • Android 用ListView实现排序「建议收藏」

    Android 用ListView实现排序「建议收藏」点击“单价”按钮或“数量信息”按钮,可按据升序或降序进行排序。布局没什么好说的在这里插入代码片<LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:app=”http://schemas.android.com/apk/res-auto”xmlns:tools=”http://schemas.android.com/tools”android:layout_widt

    2025年11月10日
    6
  • matlab插值实验目的,matlab插值实验报告数学实验.doc

    matlab插值实验目的,matlab插值实验报告数学实验.docmatlab插值实验报告数学实验.doc新乡学院数学与信息科学系实验报告实验项目名称插值实验所属课程名称数学实验实验类型综合性实验实验日期班级学号姓名成绩一、实验概述【实验目的】掌握用MATLAB插值的方法,了解拉格朗日插值、线性插值、样条插值的基本思想,了解三种网格节点数据的插值方法的基本思想,了解掌握用MATLAB计算一维差值和二维插值的方法。【实验原理】拉格朗日LAGRANGE插值。已知函…

    2022年5月26日
    37
  • 最长上升子序列的两种解法

    最长上升子序列的两种解法问题描述一个数的序列bi,当b1你的任务,就是对于给定的序列,求出最长上升子序列的长度。动态规划法如何把这个问题分解成子问题呢?经过分析,发现“求以ak(k=1,2,3…N)为终点的最长上升子序列的长度”是个好的子问题――这里把一个上升子序列中最右边的那个数,称为该子序列的“终点”。虽然这个子问题和原问题形式上并不完全一样,但是只要这N个子问题都解决了,那么这N

    2022年4月30日
    55
  • 工程管理,用网页就够了!——Wish3D Earth在线三维地球强势上线

    工程管理,用网页就够了!——Wish3D Earth在线三维地球强势上线

    2022年3月8日
    59
  • 双机流水作业调度问题——Johnson算法「建议收藏」

    双机流水作业调度问题——Johnson算法「建议收藏」概述流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完成指定的操作。流水作业调度问题是一个非常重要的问题,其直接关系到计算机处理器的工作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于3时,流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。粗糙地说,即该问题至少在目前基本上没有可能找到多项

    2025年5月24日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号