Python笔记(文件读写)

文件读写是比较重要的部分,在实际应用中比较常见。程序在读取文件的时候主要分三个步骤,打开--读取--关闭。
打开文件使用open函数,读取使用read函数,关闭使用close函数。

假设C盘有一个1.txt文件,文本内容为12345,读取里面内容使用代码:

f=open('c:\\1.txt','r')
print(f.read())
f.close

返回12345。其中open函数中要注意符号转义。

写入文件:

使用write函数,假设在文档内需要继续写入678910,代码为:

f=open('c:\\1.txt','w')
f.write('678910')
f.close

这里需要注意的是open的第二个参数,参数为w为写入,r为读取,使用write函数会将以前的内容覆盖,也就是在进行写操作前先将原有内容全部清空。
如果需要续写,open的打开方式为a,代码为:

f=open('c:\\1.txt','a')
f.write('678910')
f.close
g=open('c:\\1.txt','r')
print(g.read())
g.close

返回12345678910

正如你所见,在Python的面向对象机制下,这确实非常简单。需要注意的是,当你再次使用“w”方式在文件中写数据,所有原来的内容都会被删除。如果想保留原来的内容,可以使用“a”方式在文件中结尾附加数据:

1. fileHandle = open ( 'test.txt', 'a' ) 
2. fileHandle.write ( '\n\nBottom line.' ) 
3. fileHandle.close() 

fileHandle = open ( 'test.txt', 'a' )
fileHandle.write ( '\n\nBottom line.' )
fileHandle.close()

然后,我们读取test.txt,并将内容显示出来:

1. fileHandle = open ( 'test.txt' ) 
2. print fileHandle.read() 
3. fileHandle.close() 

fileHandle = open ( 'test.txt' )
print fileHandle.read()
fileHandle.close()

以上语句将读取整个文件并显示其中的数据。我们也可以读取文件中的一行:

1. fileHandle = open ( 'test.txt' ) 
2. print fileHandle.readline() # "This is a test." 
3. fileHandle.close() 

fileHandle = open ( 'test.txt' )
print fileHandle.readline() # "This is a test."
fileHandle.close()

同时,也可以将文件内容保存到一个list中:

1. fileHandle = open ( 'test.txt' ) 
2. fileList = fileHandle.readlines()<div></div> 
3. for fileLine in fileList: 
4.     print '>>', fileLine 
5. fileHandle.close() 

fileHandle = open ( 'test.txt' )
fileList = fileHandle.readlines()
for fileLine in fileList:
print '>>', fileLine
fileHandle.close()

Python在读取一个文件时,会记住其在文件中的位置,如下所示:

1. fileHandle = open ( 'test.txt' ) 
2. garbage = fileHandle.readline() 
3. fileHandle.readline() # "Really, it is."fileHandle.close() 

fileHandle = open ( 'test.txt' )
garbage = fileHandle.readline()
fileHandle.readline() # "Really, it is."fileHandle.close()

可以看到,只有第二行显示出来。然而,我们可以让Python从头开始读来解决这个问题:

1. fileHandle = open ( 'test.txt' ) 
2. garbage = fileHandle.readline() 
3. fileHandle.seek ( 0 ) 
4. print fileHandle.readline() # "This is a test." 
5. fileHandle.close() 

fileHandle = open ( 'test.txt' )
garbage = fileHandle.readline()
fileHandle.seek ( 0 )
print fileHandle.readline() # "This is a test."
fileHandle.close()

在上面这个例子中,我们让Python从文件第一个字节开始读取数据。所以,第一行文字显示了出来。当然,我们也可以获取Python在文件中的位置:

1. fileHandle = open ( 'test.txt' ) 
2. print fileHandle.readline() # "This is a test." 
3. print fileHandle.tell() # "17" 
4. print fileHandle.readline() # "Really, it is." 

fileHandle = open ( 'test.txt' )
print fileHandle.readline() # "This is a test."
print fileHandle.tell() # "17"
print fileHandle.readline() # "Really, it is."

或者在文件中一次读取几个字节的内容:

1. fileHandle = open ( 'test.txt' ) 
2. print fileHandle.read ( 1 ) # "T" 
3. fileHandle.seek ( 4 ) 
4. print FileHandle.read ( 1 ) # " "(原文有错) 

fileHandle = open ( 'test.txt' )
print fileHandle.read ( 1 ) # "T"
fileHandle.seek ( 4 )
print FileHandle.read ( 1 ) # " "(原文有错)

在Windows和Macintosh环境下,有时可能需要以二进制方式读写文件,比如图片和可执行文件。此时,只要在打开文件的方式参数中增加一个“b”即可:

1. fileHandle = open ( 'testBinary.txt', 'wb' ) 
2. fileHandle.write ( 'There is no spoon.' ) 
3. fileHandle.close() 

fileHandle = open ( 'testBinary.txt', 'wb' )
fileHandle.write ( 'There is no spoon.' )
fileHandle.close()

1. fileHandle = open ( 'testBinary.txt', 'rb' ) 
2. print fileHandle.read() 
3. fileHandle.close() 

fileHandle = open ( 'testBinary.txt', 'rb' )
print fileHandle.read()
fileHandle.close()

例子

记录常用的文件写入、读取、文件、目录的操作。

import time
import random
 
#打开模式列表:
#w      以写方式打开,
#a      以追加模式打开 (从 EOF 开始, 必要时创建新文件)
#r+     以读写模式打开
#w+     以读写模式打开 (参见 w )
#a+     以读写模式打开 (参见 a )
#rb     以二进制读模式打开
#wb     以二进制写模式打开 (参见 w )
#ab     以二进制追加模式打开 (参见 a )
#rb+    以二进制读写模式打开 (参见 r+ )
#wb+    以二进制读写模式打开 (参见 w+ )
#ab+    以二进制读写模式打开 (参见 a+ )
f = open('tpm.txt', 'a+')
 
for i in range(10) :
    f.write(time.strftime('%Y-%m-%d %H:%M:%S'))
    f.write(' ' + str(random.randint(0, i)) + '\n')
 
f.close()

2、文件读取

f = open('tpm.txt')
# read方式读取
s = f.read()
print(s, '\n\n\n')
print(f.tell())
#上面读取完后指针移动到最后,通过seek将文件指针移动到文件头
f.seek(0)
#使用readline每次读取一行
while(True):
    line = f.readline()
    print(line)
    if(len(line) == 0):
        break
 
f.close()

3、文件目录操作(OS包)

#os模块,处理文件和目录的一系列函数
import os
 
#打印当前目录下的所有文件 非递归
print(os.listdir(os.getcwd()))
 
#切换目录为当前目录
os.chdir('.')
 
#判断目标是否存在,不存在则创建
if(os.path.exists('./osdirs') == False):
    os.mkdir("./osdirs")
 
#重命名文件或目录名
if(os.path.exists("./os") == False) :
    os.rename("./osdirs", "./os")
 
#rmdir删除目录,需要先清空文件中的子目录或文件夹
#removedirs可多层删除目录(需要目录中无文件) makedirs可多层创建目录
if(os.path.isdir("./os")) :
    os.rmdir("./os")
 
#删除文件
if(os.path.exists('./tpm.txt')):
    os.remove('./tpm.txt')

os模块中常用方法和属性:

属性
os.linesep 文件中分割行的字符串
os.sep文件路径名的分隔符
os.curdir当前工作目录的字符串名称
os.pardir父目录字符串名称
方法
os.remove()删除文件
os.rename()重命名文件
os.walk()生成目录树下的所有文件名
os.chdir()改变目录
os.mkdir/makedirs创建目录/多层目录
os.rmdir/removedirs删除目录/多层目录
listdir()列出指定目录的文件
getcwd()取得当前工作目录(current work directory)
chmod()改变目录权限
os.path.basename()去掉目录路径,返回文件名
os.path.dirname()去掉文件名,返回目录路径
os.path.join()将分离的各部分组合成一个路径名
os.path.split()返回(dirname(),basename())元组
os.path.splitext()(返回filename,extension)元组
os.path.getatime\ctime\mtime分别返回最近访问、创建、修改时间
os.path.getsize()返回文件大小
os.path.exists()是否存在
os.path.isabs()是否为绝对路径
os.path.isdir()是否为目录
os.path.isfile()是否为文件

4、文件目录操作(shutil包)

import os
import shutil
 
#复制文件,相当于CP命令
shutil.copy('start2.txt', 'start3')
 
#移动文件或目录,相当于MV命令
shutil.move('start3', 'start4')
 
if(os.path.exists('./a/b/c') == False) :
    os.makedirs('./a/b/c')
#删除目录
shutil.rmtree('./a')
 
if(os.path.exists('./a/b/c/d') == False) :
    os.makedirs('./a/b/c/d')
     
#复制目录
if(os.path.exists('b') == False) :
    shutil.copytree('a', 'b')

shutil中常用方法

copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的
copystat( src, dst) 复制权限、最后访问时间、最后修改时间
copy( src, dst) 复制一个文件到一个文件或一个目录
copy2( src, dst) 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
copy2( src, dst) 如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
copytree(olddir,newdir,True/Flase) 把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
rmtree(path[, ignore_errors[, onerror]]) 删除目录
move( src, dst) 移动文件或目录

5、应用 - 遍历文件夹

import os
#遍历当前路劲下的所有目录和文件夹
#返回元组包含三个参数:1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for root, dirs, files in os.walk(os.getcwd()):
    #输出文件夹信息
    for dir in  dirs:
        print(os.path.join(root,dir))
    #输出文件信息
    for file in files:
        print(os.path.join(root,file))

6、总结
Python的文件操作和PHP类似,都有现成的函数去实现,所以基本上记住常用的函数就可以了

时间: 2024-10-25 09:22:58

Python笔记(文件读写)的相关文章

python中文件读写的例子

print关键字用来将后面的内容输出到屏幕 str = "I love Python" >>> print str I love Python >>> sum = lambda arg1,arg2: arg1 + arg2 >>> print '1 + 2 = %d' %sum(1,2) 1 + 2 = 3 input(), raw_input() 这两个函数都是从命令行读取字符串,前者将读取到的字符串按照Python的语法解析并返

python中文件读写的快速入门实例

说明:     相比其他语言python真的简洁很多,自己往前在学习C语言的过程中,起码要到很后面很后面才提起文件操作,但python的快速入门却以一种非常简洁的方法让你对文件操作有个体验,当然这是在linux环境下,不过不得不说,linux环境下进行编程的学习,确实是要比windows下面可以学到更多知识,下面的两个例子都是来自<Python核心编程>这本书中,真的非常经典! 一.创建并写入文件的实例 直接给代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

python文件读写操作与linux shell变量命令交互执行的方法_python

本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

Python操作文件和目录及文件读写

如果我们要在Python程序中执行目录和文件的操作,操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数. 打开Python交互式命令行,我们来看看如何使用os模块的基本功能: >>> import os>>> os.name # 操作系统名字'posix' 如果是posix,说明系统是Linux.Unix或Mac OS X,如果是nt,就是Windows系统. 要获取详细的系统信息,可以调用uname

Python遍历文件夹和读写文件的实现代码_python

需 求 分 析 1.读取指定目录下的所有文件 2.读取指定文件,输出文件内容 3.创建一个文件并保存到指定目录 实 现 过 程 Python写代码简洁高效,实现以上功能仅用了40行左右的代码~ 昨天用Java写了一个写入.创建.复制.重命名文件要将近60行代码: 不过简洁的代价是牺牲了一点点运行速度,但随着硬件性能的提升,运行速度的差异会越来越小,直到人类无法察觉~ #-*- coding: UTF-8 -*- ''' 1.读取指定目录下的所有文件 2.读取指定文件,输出文件内容 3.创建一个文

Python中字符集编码和文件读写实现程序

python中默认编码是ASCII,可以通过以下方式设置和获取: import sys print sys.getdefaultencoding() sys.setdefaultencoding('gbk')但直到python重新启动后新的默认编码才会生效,我试了一下,setdefaultencoding总是会出错,没有这个属性.用dir看,确实没有,python版本是2.5,不知道是否被取消了. 使用print来输出时,python将内容传递给系统处理,windows会按照系统默认编码来输出.

python文件读写操作简单程序代码

例子 python写文件  代码如下 复制代码 object_id_list=[1, 3, 88, 99] f=open('mylist', "w") for id in object_id_list:     f.writelines(str(id)) f.close()   #只有输入这一句之后才会真正写入到文件中 cat mylist 138899%   # 最后有一个%表示没有换行 >>> object_id_list=[1, 3, 88, 99] >&

Python 3.2官方文档翻译之文件读写

5.2文件读写 Open()方法返回一个文件对象,在大多数情况下传递两个对象: open(filename, mode): 例如: >>> f = open('/tmp/workfile', 'w') 第一个参数是包含文件名称的字符串,第二个参数是包含描述文件使用方式的字符串.如果文件只读标记为"r",只写标记为"w"(相同名字的已经存在文件将会被清除),, "a"表示添加到文件结尾,数据就会自动的添加到文件的结尾."

scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例

package yjmyzz import java.io.PrintWriter import java.util.Date import scala.io.Source object ScalaApp02 { def main(args: Array[String]) { tupleDemo println mapDemo println arrayDemo println fileWriteAndRead println(getUrlContent("http://www.cnblogs.