python文件处理fileinput使用方法详解

这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、介绍

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作,我们常用的open函数是对一个文件进行读写操作。

fileinput模块的input()函数比open函数更高效和好用,体现在:

input()函数生成一个迭代器,保证了在遇到大文件的读取时不会占用太大的内存。
用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,还能获取每一行的行号等等,非常方便。

二、fileinput读取文件函数input的使用格式

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

files:     # 文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
inplace:    # 是否将标准输出的结果写回文件,默认不取代
backup:    # 备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize:    # 缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
mode:      # 读写模式,默认为只读
openhook:    # 该钩子用于控制打开的所有文件,比如说编码方式等;

三、fileinput中的常用函数

函数 描述
input([files[, inplace[, backup]]])  帮助迭代多个输入流中的行
filename()  返回当前文件的名称
lineno()   返回(累计的)当前行号
filelineno() 返回在当前文件中的行号
isfirstline() 检查当前行是否是文件中的第一行
isstdin() 检查最后一行是否来自sys.stdin
nextfile() 关闭当前文件并移到下一个文件
close()   关闭序列

fileinput.input是最重要的函数,它返回一个迭代器对象,如果要处理多个文件,可以向这个函数提供一个或多个文件名。

还可将参数inplace设置为True(inplace=True),对于你访问的每一行,都需打印出替代内容,这些内容将被写回到当前输入文件中,此时可选参数backup用于给从原始文件创建的备份文件指定扩展名。

四、示例

1、读取多个文件

# a.txt文件的内容
"""
我
是
好
人
"""

# b.txt文件的内容
"""
他
是
坏
人
"""

# 读取一个文件
for line in fileinput.input("a.txt"):
  print(line)

# 读取多个文件
for line in fileinput.input(["a.txt", "b.txt"]):
  print(line)

2、修改文件并备份原文件

# -*_ coding:utf-8 -*-
import fileinput
for line in fileinput.input("a.txt", backup=".bak", inplace=True):
  line = line.replace("我", "小明")
  print(line)

# 结果
当前文件夹会生成a.txt.bak文件,内容是之前的内容,
而a.txt文件已经被修改了,把"我"变成了"小明"

3、输出当前行号和行内容

# -*_ coding:utf-8 -*-
import fileinput

for line in fileinput.input("a.txt"):
  lineno = fileinput.filelineno()
  print lineno, line

# 结果
1 我
2 是
3 好、
4 人

4、输出文件名

# -*_ coding:utf-8 -*-
import fileinput
for line in fileinput.input("a.txt"):
  # 在第一行前面先输出文件名
  if fileinput.isfirstline():
    print fileinput.filename()
  print line
# 结果
a.txt
我
是
好、
人

其他函数,都是类似的使用方法,这里就不全部介绍了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中的fileinput模块的简单实用示例

    这几天有这样一个需求,要将用户登陆系统的信息统计出来,做成一个报表.当用户登陆成功的时候,服务器会往日志文件里写一条像下面这种格式的记录:"日期时间@用户名@IP",这样的日志文件第天生成一个.所以,我们只要编历这些日志文件,将所有的登陆信息提取出来,并重新组织数据格式就可以了.用python写一个分析工具非常简单,你会说,用glob获取所有的日志文件,然后对每个日志文件都open(logfile),再一行一行的读取:或者用os.walk,也很简单.其实,标准库提供了另一个辅助模块,我

  • Python使用os模块和fileinput模块来操作文件目录

    os模块 在python编程中,我们会经常使用到文件和目录,这些操作python提供一个os模块,里面有很多操作文件和目录的函数. 下面介绍os的常用功能 1.获取当前路径 >>> os.getcwd() '/root/python' 2.获取目录中的内容 >>> os.listdir(os.getcwd()) ['deco.py', '6.py', 'inputfile.py', 'uniFile.py', 'oddnogen.py', 'ospathex.py',

  • python 使用sys.stdin和fileinput读入标准输入的方法

    1.使用sys.stdin 读取标准输入 [root@c6-ansible-20 script]# cat demo02.py #! /usr/bin/env python from __future__ import print_function import sys for line in sys.stdin: print(line,end="") 使用方法: cat /etc/passwd|python demo02.py python demo02.py </etc/pa

  • Python fileinput模块使用介绍

    fileinput模块提供处理一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行.它的工作方式和readlines很类似,不同点在于它不是将全部的行读到列表中而是创建了一个xreadlines对象. 下面是fileinput模块中的常用函数: input() #返回能够用于for循环遍历的对象 filename() #返回当前文件的名称 lineno() #返回当前已经读取的行的数量(或者序号) filelineno() #返回当前读取的行的行号 isfirstli

  • Python fileinput模块使用实例

    fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作. 该模块的input()函数有点类似文件readlines()方法,区别在于: 前者是一个迭代对象,即每次只生成一行,需要用for循环迭代. 后者是一次性读取所有行.在碰到大文件的读取时,前者无疑效率更高效. 用fileinput对文件进行循环遍历,格式化输出,查找.替换等操作,非常方便. [典型用法] 复制代码 代码如下: import fileinput for line in fileinput.input():   

  • 基于Python中isfile函数和isdir函数使用详解

    Python编程语言判断是否是目录 在Python编程语言中可以使用os.path.isdir()函数判断某一路径是否为目录.其函数原型如下所示. os.path.isdir(path) 参数含义如下. path:要进行判断的路径.以下实例判断E:\MJlife\test是否为目录. >>>import os >>>os.path.isdir('E:\\MJlife\\test') 判断是否为目录的输出结果 True 表示H:\MJlife\test是目录. Pytho

  • python内存监控工具memory_profiler和guppy的用法详解

    python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我在跑py-faster-rcnn的demo时,基本上跑2000张图像,16g内存就要爆了.于是尝试用python的内存监控工具来调试程序,找到不能膨胀的变量,然后del之,再手动回收内存gc.collec() 下面是我用的两个内存监视工具,一个是按每行代码查看内存占用的工具memory_profil

  • python os.path.isfile 的使用误区详解

    下列这几条语句,看出什么问题了不? for file in os.listdir(path): if os.path.isfile(file) and os.path.splitext(file)[1] == '.txt': #打开txt文件,并提取数据 冥思苦想,没错啊,为啥 os.path.isfile(file)返回的就是false呢. >>> os.listdir(path) ['cg.A.1.txt', 'cg.A.128.txt', 'cg.A.16.txt', 'cg.A.

  • python使用fileinput模块实现逐行读取文件的方法

    本文实例讲述了python使用fileinput模块实现逐行读取文件的方法.分享给大家供大家参考.具体实现方法如下: #-------------------------------- # Name: read_lines.py # Author: Kevin Harris # Last Modified: 02/13/04 # Description: This Python script demonstrates # how to use fileinput to read # each l

  • python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作,我们常用的open函数是对一个文件进行读写操作. fileinput模块的input()函数比open函数更高效和好用,体现在: input()函数生成一个迭代器,保证了在遇到大文件的读取时不会占用太大的内存. 用fileinput对文件进行循环遍历

  • 对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Thread): #用于统计csv文件的行数的线程类 def __init__(self,path): threading.Thread.__init__(self) #父类初始化 self.path=path #路径 self.line=-1 #统计行数 def run(self): reader =

  • 对python修改xml文件的节点值方法详解

    这是我的xml文件结构 <?xml version='1.0' encoding='utf-8'?> <annotation> <folder>JPEGImages</folder> <filename>train_2018-05-08_1000.jpg</filename> <path>D:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000.jpg</path

  • 对python同一个文件夹里面不同.py文件的交叉引用方法详解

    比如有两个模块,一个aa.py,一个bb.py 代码如下: aa.py: #encoding:utf-8 import bb a=1 bb.py: #encoding:utf-8 import aa print aa.a 执行bb.py时,不能执行,打印错误 AttributeError: 'module' object has no attribute 'a' 原因: 如果执行bb的话,这时候bb是__main__,不是module,所以会执行到bb的from aa,这个时候python会执行

  • Python对象类型及其运算方法(详解)

    基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >>> type(a1) str 创建一个字符串对象,其身份是指向它在内存中所处的指针(在内存中的位置) a1就是引用这个具体位置的名称 使用type()函数查看其类型 其值就是'abc' 自定义类型使用class 对象的类型用于描述对象的内部表示及其支持的方法和操作 创建特定类型的对象,也将该对象称为该类

  • 对Python捕获控制台输出流的方法详解

    有时候我们的代码里可能要调用控制台命令,比如我想用Python写一个批量编译 .java 文件的脚本,用到如下代码 常规用法 os.system import os,traceback try: p = os.system("javac Test.java") print p except: print "\nexcept:\n" print traceback.format_exc() 如然编译成功会返回一个0,如果错误会返回一个非0的值给p,这种方法可以知道执行

  • Python文件操作函数用法实例详解

    这篇文章主要介绍了Python文件操作函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 字符编码 二进制和字符之间的转换过程 --> 字符编码 ascii,gbk,shit,fuck 每个国家都有自己的编码方式 美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为gbk , 美国电脑无法识别中国电脑写的程序 , 中国电脑无法识别美国电脑写的程序 现在硬盘中躺着 ascii/gbk/shit/fuck 编码的文件,

  • Python安装依赖(包)模块方法详解

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序的设计目标是运行,而模块的设计目标是由其他程序导入并使用. 不是所有程序都有相关联的.py文件-比如说,sys模块就内置于Python中,还有些模块是使用其他语言(最常见的是C语言)实现的.不过,Python的大多数库文件都是使用Python实现的,因此,比如说,我们使用了语句import coll

  • python连接mongodb集群方法详解

    简单的测试用例 #!/usr/bin/python # -*- coding: UTF-8 -*- import time from pymongo import MongoClient # 连接单机 # single mongo # c = MongoClient(host="192.168.89.151", port=27017) # 连接集群 c = MongoClient('mongodb://192.168.89.151,192.168.89.152,192.168.89.1

  • Python开发装包八种方法详解

    目录 1. 使用 easy_install 2. 使用 pip install 3. 使用 pipx 4. 使用 setup.py 5. 使用 yum 6. 使用 pipenv 7. 使用 poetry 8. 使用 curl + 管道 1. 使用 easy_install easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了.下面是 easy_install 的一些安装示例 # 通过包名,从PyPI寻找最新版本,自动下载.编译.安装 $ easy_install pkg_

随机推荐