本文将python文件操作实例进行整理,以便后续取用。

文件打开和创建

Python中使用open()函数打开或创建文件。open()的声明如下:

open(name[, mode[, buffering]]) -> file object

其中,name表示文件名,mode表示文件打开模式。其中文件打开模式mode有如下类型

r 以只读的方式打开,常用
r+ 以读写的方式打开文件
w 以写方式打开文件,如果文件已存在,会先删再写,如果文件不存在,会创建新文件再写,常用
w+ 以读写方式打开文件,如果文件已存在,会先删再写,如果文件不存在,会创建新文件再写
a 以写方式打开文件,如果文件已存在,在文件末尾继续添加,如果文件不存在,会创建新文件再写,常用
a+ 以读写方式打开文件,如果文件已存在,在文件末尾继续添加,如果文件不存在,会创建新文件再写
b 以二进制模式打开文件,可与r、w、a、+结合使用
U 支持所有的换行符号。"\r"、"\n"、"\r\n"都表示换行

open()函数返回的是一个file文件对象,可以对文件进行创建、打开、读写、关闭等操作。file对象常用方法如下:

fp.read([size]) 从文件中读取size个字节内容,作为字符串返回。如果不带参数,字符串形式返回文件全部内容
fp.readline([size]) 从文件中读取一行作为字符串返回,如果指定size,表示每行读取的字节数,依然要读完整行的内容。
fp.readlines([size]) 把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str) 把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) 把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close() 关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
fp.seek(offset[,whence]) 将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.tell() 返回文件指针当前位置,以文件的开头为原点
fp.next() 返回下一行内容,并将文件的指针移到下一行。
fp.flush() 把缓冲区的内容写入硬盘
fp.truncate([size]) 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

说明:

(1)read()、readline()、readlines()方法会把每行末尾的'\n'读取,并不会默认的把'\n'去掉。

(2)write()、writelines()分别接收字符串、字符串列表为参数写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符。

Python读取/写入的典型方法

简单示例说明Python读取文件的几种方式,具体如下:

with open('log.txt', 'r') as f:
for line in f.readlines():
## do something
with open('log.txt', 'r') as f:
for line in f:
## do something
with open('log.txt', 'r') as f:
while True:
line = f.readline()
if not line:
break
## do something
try:
fp = open('log.txt', 'r')
lines = fp.readlines()
fp.close()
except IOError, msg:
print '*** Cannot open', log.txt, ':', msg
sys.exit(1)

Python文件写入的方式如下:

with open('log.txt', 'w') as f:
f.write('Hello, world!')
with open('log.txt', 'w') as f:
f.writelines(["Hello", "World"])
f = open('log.txt', 'w')
f.write('Hello World\n')
f.writelines(["Hello", "World"])
f.close

操作文件常用类库

os/os.path、sys、shutil、fileinput、configparser、linecache、

文件操作实例

1、查找指定目录下包含指定关键词的文件

#-*- coding:utf-8 -*-#

import os

current_dir = os.getcwd()
keyword = '.py' for roots, dirs, files in os.walk(current_dir):
for fn in files:
if keyword in fn:
print os.path.join(roots, fn) os.system('pause')

2、根据指定关键字搜索文件内容并输出文件名

#-*- coding:utf-8 -*-#

import os

current_dir = os.getcwd()
keywords = ['Happy', 'New', 'Year'] flag = True
for roots, dirs, files in os.walk(current_dir):
for fn in files:
fp_abspath = os.path.join(roots, fn)
fp = open(fp_abspath, 'r')
fp_str = fp.read()
for keyword in keywords:
if keyword not in fp_str:
flag = False
if flag:
print fp_abspath
fp.close() os.system('pause')

3、实现将指定目录下的文件内容合并到一个文件。

#-*- coding:utf-8 -*-#

import os
import fileinput current_dir = os.getcwd()
file_lists = []
combine_file = 'combine_files.txt' if os.path.exists(combine_file):
os.remove(combine_file) for roots, dirs, files in os.walk(current_dir):
for fn in files:
if fn.endswith('.txt'):
file_lists.append(os.path.join(roots, fn))
print file_lists
for eachLine in fileinput.input(files=file_lists, inplace=True):
if fileinput.isfirstline():
#print fileinput.filename()
print os.path.split(fileinput.filename())[1]
print eachLine, fw = open(combine_file, 'w') for fn in file_lists:
fp = open(fn, 'r')
fw.writelines(fp.readlines())
fp.close() fw.close()

4、将指定文件内容按行拆分,每行单独写入一个文件。并在每行的起始处标记行号。

# -*- coding: utf-8 -*-

import os
import sys filename = 'temp_1.txt'
filename_prefix = os.path.splitext(filename)[0]
filename_posfix = os.path.splitext(filename)[1] if not os.path.exists(filename):
print "THe %s file not exist,please check" % (filename,) fp = open(filename, 'r')
line_no = 1
for eachLine in fp.readlines():
filename_eachLine = filename_prefix + '_Line_' + str(line_no) + filename_posfix
fw_eachLine = open(filename_eachLine, 'w')
fw_eachLine.write('Line ' + str(line_no) + ': ' + eachLine.rstrip())
fw_eachLine.close()
line_no += 1
fp.close()
print "End the script,exit"

[ Python入门教程 ] Python文件基本操作的更多相关文章

  1. [ Python入门教程 ] Python字典数据类型及基本操作

    字典是Python中重要的数据类型,字典是由"键-值"对组成的集合,"键-值"对之间用逗号隔开,包含在一对花括号中.字典中的"值"通过&qu ...

  2. boost.python入门教程 ----python 嵌入c++

    Python语言简介 Python是一种脚本语言.以开放的开发接口和独特的语法著称.尽管Python在国内引起注意只有几年的时间,但实际上Python出现于上世纪90年代(据www.python.or ...

  3. [ Python入门教程 ] Python文件基本操作_shutil模块

    shutil模块是对os模块中文件操作的补充,提供文件和目录的移动.复制.打包.压缩.解压等功能 shutil常用函数   shutil.copyfile(src, dst)   复制文件, 如果ds ...

  4. [ Python入门教程 ] Python基础语法

    Python的语法非常简练,因此用Python编写的程序可读性强.容易理解.本章将介绍Python的基本语法和概念. Python文件类型 1.源代码.Python的源代码的扩展名以py结尾,可直接运 ...

  5. [ Python入门教程 ] Python中JSON模块基本使用方法

    JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式,Python标准库中的json模块提供了一种简单的方法来编码和解码JSON格式的数据.用于完成字符串和p ...

  6. [ Python入门教程 ] Python中日志记录模块logging使用实例

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  7. [ Python入门教程 ] Python的控制语句

    Python控制语句由条件语句.循环语句构成.控制语句根据条件表达式控制程序的流转.本章将介绍Python中控制语句的基本语法. 条件判断语句 (1)if条件语句 if语句用于检测某个条件是否成立.如 ...

  8. [ Python入门教程 ] Python中日期时间datetime模块使用实例

    Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...

  9. [ Python入门教程 ] Python生成随机数模块(random)使用方法

    1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...

随机推荐

  1. vscode10个必装的插件

    VSCode 必装的 10 个高效开发插件   本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创 ...

  2. [DP]Luogu 2014NOIP提高组 飞扬的小鸟题解

    2014NOIP提高组飞扬的小鸟题解 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一 ...

  3. 用openresty(Lua)写一个获取YouTube直播状态的接口

    文章原发布于:https://www.chenxublog.com/2019/08/29/openresty-get-youtube-live-api.html 之前在QQ机器人上面加了个虚拟主播开播 ...

  4. Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变

    场景 在新建一个Winform窗体后,拖拽控件设置其布局如下 如果只是单纯的这么设计,我们在运行后,如果对窗口进行缩放就会导致如下 所以我们需要在设计页面布局时对控件进行定位设置. 注: 博客主页:h ...

  5. python 错误、调试、单元测试、文档测试

    错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https:// ...

  6. 二十:职责链模式详解(类似于spring的hangler处理请求)

    定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. “看这个定义,就是将一堆可以处理请求的对象连 ...

  7. java 图书馆初级编写

    import java.util.Scanner; import java.util.Arrays; public class book { public static void main(Strin ...

  8. 在vue项目中通过iframe引入jquery项目

    最近公司因为原来的jq框架存在的问题太多,所以要进行主题框架的重新搭建,我使用的vue进行的主题框架的重新搭建,但是原来的页面已经完成很多了,而且都是使用的jquery进行开发的 在vue中引入jqu ...

  9. 切换tab栏echarts错位的问题

    在使用echarts的时候页面中有tab栏的时候经常遇到echarts错位的情况 解决方法一.在点击tab栏的时候进行页面中的echarts初始化 在多层tab栏存在的时候eachrts的容器布局是百 ...

  10. 【初识Spring】对象(Bean)实例化及属性注入(注解方式)

    通过xml的方式进行对象的实列化或属性注入或许有一些繁琐,所以在开发中常用的方式更多是通过注解的方式实现对象实例化和属性注入的. 开始之前 1.导入相关的包(除了导入基本的包还要导入aop的包): 创 ...