python进阶之路之文件处理
Python之文件处理
*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
/* BLOCKS
=============================================================================*/
p, blockquote, ul, ol, dl, table, pre {
margin: 15px 0;
}
/* HEADERS
=============================================================================*/
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
}
h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
font-size: inherit;
}
h1 {
font-size: 28px;
color: #000;
}
h2 {
font-size: 24px;
border-bottom: 1px solid #ccc;
color: #000;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
color: #777;
font-size: 14px;
}
body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
margin-top: 0;
padding-top: 0;
}
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0;
}
h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
margin-top: 10px;
}
/* LINKS
=============================================================================*/
a {
color: #4183C4;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* LISTS
=============================================================================*/
ul, ol {
padding-left: 30px;
}
ul li > :first-child,
ol li > :first-child,
ul li ul:first-of-type,
ol li ol:first-of-type,
ul li ol:first-of-type,
ol li ul:first-of-type {
margin-top: 0px;
}
ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}
dl {
padding: 0;
}
dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px;
}
dl dt:first-child {
padding: 0;
}
dl dt>:first-child {
margin-top: 0px;
}
dl dt>:last-child {
margin-bottom: 0px;
}
dl dd {
margin: 0 0 15px;
padding: 0 15px;
}
dl dd>:first-child {
margin-top: 0px;
}
dl dd>:last-child {
margin-bottom: 0px;
}
/* CODE
=============================================================================*/
pre, code, tt {
font-size: 12px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
code, tt {
margin: 0 0px;
padding: 0px 0px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}
pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}
pre {
background-color: #f8f8f8;
border: 1px solid #ccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code, pre tt {
background-color: transparent;
border: none;
}
kbd {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #DDDDDD;
background-image: linear-gradient(#F1F1F1, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px 2px 2px 2px;
border-style: solid;
border-width: 1px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
line-height: 10px;
padding: 1px 4px;
}
/* QUOTES
=============================================================================*/
blockquote {
border-left: 4px solid #DDD;
padding: 0 15px;
color: #777;
}
blockquote>:first-child {
margin-top: 0px;
}
blockquote>:last-child {
margin-bottom: 0px;
}
/* HORIZONTAL RULES
=============================================================================*/
hr {
clear: both;
margin: 15px 0;
height: 0px;
overflow: hidden;
border: none;
background: transparent;
border-bottom: 4px solid #ddd;
padding: 0;
}
/* TABLES
=============================================================================*/
table th {
font-weight: bold;
}
table th, table td {
border: 1px solid #ccc;
padding: 6px 13px;
}
table tr {
border-top: 1px solid #ccc;
background-color: #fff;
}
table tr:nth-child(2n) {
background-color: #f8f8f8;
}
/* IMAGES
=============================================================================*/
img {
max-width: 100%
}
-->
1.文件的常见操作
文件是日常编程中常用的操作,通常用于存储数据或应用系统的参数。python提供了os、os.path、shutil等模块处理文件,其中包括最常用的打开文件,读写文件,赋值文件和删除文件等函数。
1.1文件的创建
python3.+中移除了python2中的全局file()函数,还保留了open()函数。文件的打开或创建可以使用函数open()。该函数可以指定处理模式,设置打开的文件为只读,只写,可读写状态。open()的声明如下:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
参数说明:
- 参数file是被打开的文件名称,如果文件file不存在,open()将创建名为name的文件,然后再打开该文件。
- 参数mode是指文件的打开模式。文件的打开模式请参照以下内容。
- 参数buffering是设置缓存模式。0表示不缓存,1表示缓存;如果大于1则表示缓冲区的大小,以字节为单位。
- 参数encoding是设置文件的字符编码格式。
open()函数会返回一个file对象,file 对象可以对文件进行各种操作 文件模式:
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
创建一个新的文件,打开并写入
'a' open for writing, appending to the end of the file if it exists
模式打开文件以追加
'b' binary mode二进制模式打开,可与其他模式一起使用
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)支持所有的换行符号
注意:图片、视频等文件必须使用b的模式进行读写。
message = '''
hello world,\n
hello python,\n
good time.
'''
f = open('test.txt','w')
f.write(message)
f.close()
代码说明:
- 定义一个字符串变量
- 以只写模式创建一个文件并写入
- 将字符串变量写入文件
- 关闭文件
1.2 文件的读取
文件的读取有多种方法,可以使用readline()、readlines()、或read()函数读取文件。
- 按行读取方式readline()
readline()每次读取文件的一行,需要循环读取文件。但是当文件指针移动到文件的末尾是,依然使用readline()读取文件将出现错误。因此程序中需要添加一个判断语句,判断时间指针是否在文件的尾部,并且通过该语句中断循环。示例如下:
# 使用readline模式读取文件
f = open('test.txt','r')
while True:
line = f.readline()
if line:
print(line)
else:
break
f.close()
#如果line = f.readline(2)则表示每次循环只读取两字节的内容,直到行的末尾
2.多行读取方式readlines()
# 多行读取文件
f = open('test.txt')
lines = f.readlines()
for line in lines:
print(line)
f.close()
3.一次性读取方式read()
读取文件最简单的方式就是使用read(),read()将文件中一次性读出所有内容,并赋值给字符串变量,但是当文件比较大的时候不建议使用read()的方式去读取文件,因为一次读取比较大的内容会消耗大量的内存,影响系统的性能。示例如下:
# 一次读取文件
f = open('test.txt','r')
lines = f.read()
print(lines)
f.close()
文件指针:
with open('test.txt','rb') as src:
rd = src.read(100)
print(rd)
print(src.seek(src.tell()))
rd = src.read(100)
print(rd)
print(src.seek(src.tell()))
#每次读取100字节,然后返回指针的位置
4.with函数
通常我们使用open()打开一个文件并赋值给一个字符串变量来对文件进行操作,最后还需要进行手动关闭文件,这样写起来有点麻烦,下面我们可以使用with函数将文件打开与关闭写在一行函数上。
with open('test.txt','r') as src:
da = src.read()
print(da)
#只读模式打开文件并赋值给src,然后对文件进行操作即可,代码与使用open()来操作文件相同。
1.3文件的写入
文件的写入有多种方法,可以使用write(),也可以使用writelines()方法写入文件。write()可以将字符串写入文件,writelines()可以将列表写入文件。示例如下:
m1 = 'hello world'
l1 = ['good','time']
f = open('test1.txt','w')
f.write(m1)
f.writelines(l1)
f.close()
文件的追加:
m1 = 'hello python'
f = open('test1.txt','a+')
f.write(m1)
f.close()
1.4文件的删除
文件的删除需要使用os模块和os.path模块,os模块提供了系统的环境、文件、目录等操作系统的函数。 对于文件来说比较常用的os模块的函数如下:
- os.access(path,mode)#按照mode指定的权限进行访问
- os.chmod(path,mode)#改变文件的访问权限,mode用UNIX的权限符号表示
- os.open(filename,flag[,mode=0777])#按照mode指定的权限打开文件。默认情况下,给所有用户读、写、执行的权限
- os.remove(path)#删除path指定的文件
- os.rename(old,new)#重命名文件或目录,old表示原文件或目录,new表示新文件或目录
- os.stat(path)#返回path指定文件的所有属性
- os.fstat(path)#返回打开文件的所有属性
- os.startfile(filepath[,operation])#启动关联程序打开文件。例如,打开一个html文件,将启动IE浏览器
- os.tmpfile()#创建一个临时文件,文件创建在操作系统的临时目录中
注意:os模块的open()函数与内建的open()函数的用法不同。
os.path模块常用的函数如下:
- os.path.abspath(path)#返回path所在的绝对路径
- os.path.dirpath(path)#返回目录的路径
- os.path.exists(path)#判断文件是否存在
- os.path.getatime(filename)#返回文件的最后访问时间
- os.path.getctime(filename)#返回文件的创建时间
- os.path.getmtime(filename)#返回文件最后的修改时间
- os.path.getsize(filename)#返回文件的大小
os.path判断函数
- os.path.isabs(s)#测试路径是否是绝对路径
- os.path.isdir(path)#判断path指定的是否是目录
- os.path.isfile(path)#判断path指定的是否是文件
- os.path.split(p)#对路径进行分割,并以列表的方式返回
- os.path.splitext(p)#从路径中分割文件的扩展名
- os.path.splitdrive(p)#从路径中分割驱动器的名称
- os.walk(top,func,arg)#遍历目录树
示例如下:
import os
if os.path.exists('../test.txt'):
os.remove('test.txt')
print('is del')
else:
print('no')
1.5文件的复制
文件的复制有多种方法,下面我们来看一下第一种比较low的方式,就是读写的方式进行文件复制。示例如下:
#使用read()、write()实现文件复制
f1 = open('1.txt','r')
f2 = open('2.txt','w')
f2.write(f1.read())
f2.close()
f1.close()
第二种方法:
shutil模块,shutil模块是另外一个文件、目录的管理接口,提供了一些用于复制、目录的函数。copyfile()函数可以实现文件的复制,copyfile()函数的声明如下:
shuil.copyfile(src,dst)
- src表示源文件的路径,src是字符串类型
- dst表示目标文件的路径,dst是字符串类型
- src指向的文件复制到dst指向的文件
示例如下:
import shutil
shutil.move('1.txt','2.txt')
1.6文件的重命名
os模块的函数rename()可以对文件或目录进行重命名。
import os
os.rename('1.txt','11.txt')
使用shutil中的move()函数也可以实现文件重命名的目的。
import shutil
shutil.move('11.txt','1.txt')
修改文件的后缀名:
import os
files = os.listdir('.')
for filename in files:
li = os.path.splitext(filename)#返回后文件名和后缀名的列表
if li[1] == '.html':
newname = li[0] + '.htm'
os.rename(filename,newname)
glob模块用于对路径的匹配,返回符合给定条件的文件列表。glob模块的主要函数就是glob(),该函数返回符合同一匹配条件的多个文件。上面的呈现需要判断是否为html后缀,也可以使用glob()函数直接匹配文件名称。 匹配代码如下:
glob.glob('*.html')
glob还可以对路径做更对的匹配。例如,匹配C盘中以w开头的目录中所有的文本文件。
glob.glob('C:\\\w*\\*\\txt')
1.7文件的搜索和替换
文件内容的搜索和替换可以使用字符串的查找和替换来实现。例如,在htllo.txt文件中查找字符串'hello',并统计'hello'出现的次数。代码如下:
python进阶之路之文件处理的更多相关文章
- Python学习之路4 - 文件操作&编码转换
文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式, ...
- Python进阶之路---1.4python数据类型-数字
python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print print('hello,python') 1.1pyt ...
- Python进阶之路---1.1python简介
Python简介 Python简介 Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释 ...
- python进阶--打包为exe文件
一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...
- python成长之路五-文件操作
1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...
- python爬虫之路——基本文件操作
介绍python如何打开文件和读取数据 新建TXT文档,为追加模式: f=open('c;/wendang/demo.txt','a+') content="abcdefg123456789 ...
- Python学习之路5☞文件处理
一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...
- python进阶(4)文件操作
文件操作 文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件 open(file, mode='r', buffering=-1, encod ...
- Python进阶之路---1.5python数据类型-字符串
字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...
随机推荐
- 多线程下载 HttpURLConnection
Activity /**实际开发涉及文件上传.下载都不会自己写这些代码,一般会使用第三方库(如xUtils)或Android提供的DownloadManager下载*/ public class Ht ...
- 获取checkboxlist选中的值以及绑定来自之前选中的来自数据库的值
//////ps:一下几句都是一个意思,为的是以后有人搜索关键字的时候能定位到这里///checkboxlist绑定选中值///checkboxlist绑定来之mssql数据的值///checkbox ...
- ViewPager欢迎页
布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- android开发架构理解
1. android 开发和普通的PC程序开发的,我觉得还是不要过度设计,因为手机开发,项目相对传统软件开发就小很多,而且手机的性能有限,过度设计代码mapping需要消耗的能相对就高,而且手机开发的 ...
- list类型for遍历
package cn.stat.p9.map.demo; import java.util.ArrayList; public class Listfor { /** * @param args */ ...
- java比较器Comparator 使用
PresonDemo package cn.stat.p5.person.demo; public class PresonDemo implements Comparable { private S ...
- Tiling_easy version(填2 x N的格子的种类)
E - Tiling_easy version 题目大意: 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法. ...
- Oracle—用户管理的备份(一)
用户管理的备份(一) 一.首先要知道数据库中表空间和文件的信息,有几个性能视图,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,d ...
- 关于js中的事件
这是第一篇技术性博客. 因为最近做的web版前端求职简历算是告一段落了(点此看简历).(稍微记录下吧:自从确定简历的简笔画风格后(因为刚开始设想的蓝天白云大树啥的不仅图片特难找而且做着做着就觉得有点俗 ...
- 校门外的树 - Grids2808
校门外的树 问题描述: 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米.我们 可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置:数轴上的每 个整数点, ...