python的文件操作方法,

python中的文件对象:
文件对象不仅可以用来访问普通的磁盘文件,
而且也可以访问任何其它类型抽象层面上的”文
件”. 一旦设置了合适的”钩子”, 你就可以访问具有文件类型接口的其它对象,
就好像访问的是普
通文件一样.

文件内建函数[open()和 file()]

1 open('filename')
2 with open('filename') as f:
3         pass

open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。模式和缓冲参数都是可选的,默认为只读模式打开文件。使用with即使发生错误可以关闭文件,
下面列出文件对象的访问的模式:

 1 文件模式   操作
 2 r  以只读方式打开
 3 rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
 4 w  以写方式打开 (必要时清空)
 5 a  以追加模式打开 (从 EOF 开始, 必要时创建新文件)
 6 r+ 以读写模式打开
 7 w+ 以读写模式打开 (参见 w )
 8 a+ 以读写模式打开 (参见 a )
 9 rb 以二进制读模式打开
10 wb 以二进制写模式打开 (参见 w )
11 ab 以二进制追加模式打开 (参见 a )
12 rb+ 以二进制读写模式打开 (参见 r+ )
13 wb+ 以二进制读写模式打开 (参见 w+ )
14 ab+ 以二进制读写模式打开 (参见 a+ )
15 x    如果文件存在报错,不存在则创建
16 ***加b模式打开,不可以在指定encoding,切写入时也需要转换为字节写入文件
17 
18 下面是一些打开文件的例子:
19 f = open('/etc/motd') # 以读方式打开
20 f = open('test', 'w') # 以写方式打开
21 f = open('data', 'r+') # 以读写方式打开
22 f = open('io.sys', 'rb') # 以二进制读模式打开
23 
24 bytes 字符串转换字节类型
25 n=bytes(李杰,encoding='utf-8')[转换的字符,可以是变量,转换后的编码]
26 字节转换为字符串
27 str(bytes(李杰,encoding='utf-8'),encoding='utf-8)
28 文件操作

open() 和 file() 函数具有相同的功能, 可以任意替换.任何使用 open()
的地方, 都可以使用 file() 替换它.建议使用 open() 来读写文件,
在处理文件对象时使用 file() 。open() 成功执行并返回一个文件对象之后,
所有对该文件的后续操作都将通过这个”句柄”进行.

文件方法可以分为四类: 输入, 输出, 文件内移动, 以及杂项操作.
输入

read() 方法用来直接读取字节到字符串中, 最多读取给定数目个字节.
如果没有给定 size
参数(默认值为 -1)或者 size 值为负, 文件将被读取直至末尾.

图片 1

指定读取size:

图片 2

readline() 方法读取打开文件的一行(读取下个行结束符之前的所有字节).
然后整行,包括行
结束符,作为字符串返回. 和 read() 相同, 它也有一个可选的 size 参数,
默认为 -1, 代表读至
行结束符. 如果提供了该参数, 那么在超过 size 个字节后会返回不完整的行.

图片 3

readlines() 方法并不像其它两个输入方法一样返回一个字符串.
它会读取所有(剩余的)行然
后把它们作为一个字符串列表返回. 它的可选参数 sizhint
代表返回的最大字节大小. 如果它大
于 0 , 那么返回的所有行应该大约有 sizhint 字节(可能稍微大于这个数字,
因为需要凑齐缓冲区
大小).

图片 4

输出
write() 内建方法功能与 read() 和 readline() 相反.
它把含有文本数据或二进制数据块的
字符串写入到文件中去.

图片 5

文件内移动
seek() 方法(类似 C 中的 fseek()
函数)可以在文件中移动文件指针到不同的位置. offset
字节代表相对于某个位置偏移量. 位置的默认值为 0 ,
代表从文件开头算起(即绝对偏移量), 1 代
表从当前位置算起, 2 代表从文件末尾算起. 如果你是一个 C
程序员,并且使用过了 fseek() , 那
么,0, 1, 2 分别对应着常量 SEEK_SET, SEEK_CUR, 以及 SEEK_END.
当人们打开文件进行读写操
作的时候就会接触到 seek()方法。

图片 6#跳过前五个字符,读取之后的内容

truncate() 方法, 它接受一个可选的 size 作为参数. 如果给定, 那么文
件将被截取到最多 size 字节处. 如果没有传递 size 参数,
那么默认将截取到文件的当前位置.
例如, 你刚打开了一个文件, 然后立即调用 truncate() 方法,
那么你的文件(内容)实际上被删除,
这时候你是其实是从 0 字节开始截取的( tell() 将会返回这个数值 )

图片 7

其他:

close()
关闭文件来结束对它的访问. Python
垃圾收集机制也会在文件对象的引用计数降
至零的时候自动关闭文件. 这在文件只有一个引用时发生, 例如 f = open(…),
然后 f 在原文
件显式地关闭前被赋了另一个文件对象.
良好的编程习惯要求在重新赋另个文件对象前关闭这个文
件. 如果你不显式地关闭文件, 那么你可能丢失输出缓冲区的数据.

fileno() 方法返回打开文件的描述符. 这是一个整数, 可以用在如 os 模块(
os.read() )的
一些底层操作上

flush() 方法会直接把内部缓冲区中的数据立刻写入文件,
而不是被动地等待输出缓冲
区被写入. isatty() 是一个布尔内建函数, 当文件是一个类 tty 设备时返回
True , 否则返回
False . truncate() 方法将文件截取到当前文件指针位置或者到给定 size ,
以字节为单位.

 

文件对象的内建方法列表

 1 文件对象的方法 操作
 2 file.close() 关闭文件
 3 file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值)
 4 file.flush() 刷新文件的内部缓冲区
 5 file.isatty() 判断 file 是否是一个类 tty 设备
 6 file.nexta() 返回文件的下一行(类似于 file.readline() ), 或在没有其它行时
 7 引发 StopIteration 异常
 8 file.read(size=-1) 从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读
 9 取剩余的所有字节, 然后作为字符串返回.如果打开模式无b,则read按字符读取,否则按字节读取
10 file.readline(size=-1) 从文件中读取并返回一行(包括行结束符), 或返回最大 size
11 file=open('test','ab')
12 file.write(bytes('hehe',encoding='utf-8')) 向文件写入字符串  (会覆盖原有数据,坑
13 file.close() 关闭文件
14 file.tell获取当前指针的位置
15 file.read()如果打开模式无b,则read按字符读取,否则按字节读取
16 file.fileno文件描述符
17 file.truncat 截断数据,清除文件指针之后的数据
18 file.seek(off, whence=0) 在文件中移动文件指针, 从 whence ( 0 代表文件其始, 1代表当前位置, 2 代表文件末尾)偏移 off 字节,不论是否有中文,都以字节为单位
19 file.truncate(size=file.tell()) 截取文件到最大 size 字节, 默认为当前文件位置
20 file.writelines(seq) 向文件写入字符串序列 seq ; seq 应该是一个返回字符串的
21 可迭代对象
22 file.readlines(sizhint=0) 读取文件的所有行并作为一个列表返回(包含所有的行结束
23 符); 

对文件系统的访问

对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python
访问操作系统功能的主
要接口.
os 模块的文件/目录访问函数

文件处理

1 mkfifo()/mknod()a 创建命名管道/创建文件系统节点
2 remove()/unlink() Delete file 删除文件
3 rename()/renames()b 重命名文件
4 *statc() 返回文件信息
5 symlink() 创建符号链接
6 utime() 更新时间戳
7 tmpfile() 创建并打开('w+b')一个新的临时文件
8 walk()a 生成一个目录树下的所有文件名

目录/文件夹

1 chdir()/fchdir()a 改变当前工作目录/通过一个文件描述符改变当前工作目录
2 chroot()d 改变当前进程的根目录
3 listdir() 列出指定目录的文件
4 getcwd()/getcwdu()a返回当前工作目录/功能相同, 但返回一个 Unicode 对象
5 mkdir()/makedirs() 创建目录/创建多层目录
6 rmdir()/removedirs() 删除目录/删除多层目录

访问/权限

1 access() 检验权限模式
2 chmod() 改变权限模式
3 chown()/lchown()a 改变 owner 和 group ID/功能相同, 但不会跟踪链接
4 umask() 设置默认权限模式

文件描述符操作

1 open() 底层的操作系统 open (对于文件, 使用标准的内建 open() 函数)
2 read()/write() 根据文件描述符读取/写入数据
3 dup()/dup2() 复制文件描述符号/功能相同, 但是是复制到另一个文件描述符

设备号

1 makedev()a 从 major 和 minor 设备号创建一个原始设备号
2 major()a /minor()a 从原始设备号获得 major/minor 设备号

 os.path 可以完成一些针对路径名的操作.
它提供的函数可以完成管理和操作文
件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作
os.path 模块中的路径名访问函数
分隔

1 basename() 去掉目录路径, 返回文件名
2 dirname() 去掉文件名, 返回目录路径
3 join() 将分离的各部分组合成一个路径名
4 split() 返回 (dirname(), basename()) 元组
5 splitdrive() 返回 (drivename, pathname) 元组
6 splitext() 返回 (filename, extension) 元组

信息

1 getatime() 返回最近访问时间
2 getctime() 返回文件创建时间
3 getmtime() 返回最近文件修改时间
4 getsize() 返回文件大小(以字节为单位)

查询

1 exists() 指定路径(文件或目录)是否存在
2 isabs() 指定路径是否为绝对路径
3 isdir() 指定路径是否存在且为一个目录
4 isfile() 指定路径是否存在且为一个文件
5 islink() 指定路径是否存在且为一个符号链接
6 ismount() 指定路径是否存在且为一个挂载点
7 samefile() 两个路径名是否指向同个文件

还有大量的其它模块与文件和输入/输出有关,
它们中的大多数都可以在主流平台上工作.

 1 base64 提供二进制字符串和文本字符串间的编码/解码操作
 2 binascii 提供二进制和 ASCII 编码的二进制字符串间的编码/解码操作
 3 bz2a 访问 BZ2 格式的压缩文件
 4 csv  访问 csv 文件(逗号分隔文件)
 5 filecmpb 用于比较目录和文件
 6 fileinput 提供多个文本文件的行迭代器
 7 getopt/optparsea 提供了命令行参数的解析/处理
 8 glob/fnmatch 提供 Unix 样式的通配符匹配的功能
 9 gzip/zlib 读写 GNU zip( gzip) 文件(压缩需要 zlib 模块)
10 shutil 提供高级文件访问功能
11 c/StringIO 对字符串对象提供类文件接口
12 tarfilea 读写 TAR 归档文件, 支持压缩文件
13 tempfile 创建一个临时文件(名)
14 uu   格式的编码和解码
15 zipfilec 用于读取 ZIP 归档文件的工具

下面列举几个简单的示例:

对文件进行迭代而不使用变量存储文件对象

1 for line in open(finename):
2         print(line)

同时打开两个文件

1 with open('user.txt') as f,open('user1.txt') as f2:
2         pass

获取文件前十行

1 with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2:
2     times = 0
3     for line in f1:         
4         times += 1 
5         if times <=10:
6             f2.write(line)
7         else:
8             break

替换文件内指定的字符串

1 with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2:
2     for line in f1:
3         new_str = line.replace("alex", 'st')
4         f2.write(new_str)  

 

python中的文件对象:
文件对象不仅可以用来访问普通的磁盘文件,
而且也可以访问任何其它类型抽象层面上的”文 件…

python文件和目录操作方法,

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
2.返回指定目录下的所有文件和目录名:os.listdir()
3.函数用来删除一个文件:os.remove()
4.删除多个目录:os.removedirs(r“c:\python”)
5.检验给出的路径是否是一个文件:os.path.isfile()
6.检验给出的路径是否是一个目录:os.path.isdir()
7.判断是否是绝对路径:os.path.isabs()
8.检验给出的路径是否真地存:os.path.exists()
9.返回一个路径的目录名和文件名:os.path.split()     eg
os.path.split(‘/home/swaroop/byte/code/poem.txt’)
结果:(‘/home/swaroop/byte/code’, ‘poem.txt’) 
10.分离扩展名:os.path.splitext()
11.获取路径名:os.path.dirname()
12.获取文件名:os.path.basename()
13.运行shell命令: os.system()
14.读取和设置环境变量:os.getenv() 与os.putenv()
15.给出当前平台使用的行终止符:os.linesep   
Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
16.指示你正在使用的平台:os.name      
对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
17.重命名:os.rename(old, new)
18.创建多级目录:os.makedirs(r“c:\python\test”)
19.创建单个目录:os.mkdir(“test”)
20.获取文件属性:os.stat(file)
21.修改文件权限与时间戳:os.chmod(file)
22.终止当前进程:os.exit()
23.获取文件大小:os.path.getsize(filename)
二、文件操作方法大全: 1.os.mknod(“test.txt”)             #创建空文件
2.fp =
open(“test.txt”,w)          #直接打开一个文件,如果文件不存在则创建文件
3.关于open 模式:

w:以写方式打开,
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )

fp.read([size])                     #size为读取的长度,以byte为单位
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.flush()                          #把缓冲区的内容写入硬盘
fp.fileno()                         #返回一个长整型的”文件标签“
fp.isatty()                        
#文件是否是一个终端设备文件(unix系统中的)
fp.tell()                          
#返回文件操作标记的当前位置,以文件的开头为原点
fp.next()                          
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in
file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence])           
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size])                
#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
三、目录操作方法大全
1.创建目录
os.mkdir(“file”)                   
2.复制文件:
shutil.copyfile(“oldfile”,”newfile”)       
#oldfile和newfile都只能是文件
shutil.copy(“oldfile”,”newfile”)           
#oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
3.复制文件夹:
4.shutil.copytree(“olddir”,”newdir”)       
#olddir和newdir都只能是目录,且newdir必须不存在
5.重命名文件(目录)
os.rename(“oldname”,”newname”)             
#文件或目录都是使用这条命令
6.移动文件(目录)
shutil.move(“oldpos”,”newpos”)   
7.删除文件
os.remove(“file”)
8.删除目录
os.rmdir(“dir”)                             #只能删除空目录
shutil.rmtree(“dir”)                       
#空目录、有内容的目录都可以删
9.转换目录
os.chdir(“path”)                            #换路径
四、文件综合操作实例
将文件夹下所有图片名称加上’_fc’
python代码:

 1 # -*- coding:utf-8 -*-
 2 import re
 3 import os
 4 import time
 5 #str.split(string)分割字符串
 6 #'连接符'.join(list) 将列表组成字符串
 7 def change_name(path):
 8     global i
 9     if not os.path.isdir(path) and not os.path.isfile(path):
10         return False
11     if os.path.isfile(path):
12         file_path = os.path.split(path) #分割出目录与文件
13         lists = file_path[1].split('.') #分割出文件与文件扩展名
14         file_ext = lists[-1] #取出后缀名(列表切片操作)
15         img_ext = ['bmp','jpeg','gif','psd','png','jpg']
16         if file_ext in img_ext:
17             os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
18             i+=1 #注意这里的i是一个陷阱
19         #或者
20         #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
21         #if file_ext in img_ext:
22         #    print('ok---'+file_ext)
23     elif os.path.isdir(path):
24         for x in os.listdir(path):
25             change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
26 img_dir = 'D:\xx\\xx\images'27 start = time.time()
28 i = 0
29 change_name(img_dir)
30 c = time.time() - start
31 print('程序运行耗时:%0.2f'%(c))
32 print('总共处理了 %s 张图片'%(i))

输出结果:

1 程序运行耗时:0.50
2 总共处理了 41 张图片

 

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
1.得到当前工作目录,即当前Python脚…

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
2.返回指定目录下的所有文件和目录名:os.listdir()
3.函数用来删除一个文件:os.remove()
4.删除多个目录:os.removedirs(r“c:\python”)
5.检验给出的路径是否是一个文件:os.path.isfile()
6.检验给出的路径是否是一个目录:os.path.isdir()
7.判断是否是绝对路径:os.path.isabs()
8.检验给出的路径是否真地存:os.path.exists()
9.返回一个路径的目录名和文件名:os.path.split()     eg
os.path.split(‘/home/swaroop/byte/code/poem.txt’)
结果:(‘/home/swaroop/byte/code’, ‘poem.txt’) 
10.分离扩展名:os.path.splitext()
11.获取路径名:os.path.dirname()
12.获取文件名:os.path.basename()
13.运行shell命令: os.system()
14.读取和设置环境变量:os.getenv() 与os.putenv()
15.给出当前平台使用的行终止符:os.linesep   
Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
16.指示你正在使用的平台:os.name      
对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
17.重命名:os.rename(old, new)
18.创建多级目录:os.makedirs(r“c:\python\test”)
19.创建单个目录:os.mkdir(“test”)
20.获取文件属性:os.stat(file)
21.修改文件权限与时间戳:os.chmod(file)
22.终止当前进程:os.exit()
23.获取文件大小:os.path.getsize(filename)
二、文件操作方法大全: 1.os.mknod(“test.txt”)             #创建空文件
2.fp =
open(“test.txt”,w)          #直接打开一个文件,如果文件不存在则创建文件
3.关于open 模式:

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
2.返回指定目录下的所有文件和目录名:os.listdir()
3.函数用来删除一个文件:os.remove()
4.删除多个目录:os.removedirs(r“c:\python”)
5.检验给出的路径是否是一个文件:os.path.isfile()
6.检验给出的路径是否是一个目录:os.path.isdir()
7.判断是否是绝对路径:os.path.isabs()
8.检验给出的路径是否真地存:os.path.exists()
9.返回一个路径的目录名和文件名:os.path.split()     eg
os.path.split(‘/home/swaroop/byte/code/poem.txt’)
结果:(‘/home/swaroop/byte/code’, ‘poem.txt’) 
10.分离扩展名:os.path.splitext()
11.获取路径名:os.path.dirname()
12.获取文件名:os.path.basename()
13.运行shell命令: os.system()
14.读取和设置环境变量:os.getenv() 与os.putenv()
15.给出当前平台使用的行终止符:os.linesep   
Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
16.指示你正在使用的平台:os.name      
对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
17.重命名:os.rename(old, new)
18.创建多级目录:os.makedirs(r“c:\python\test”)
19.创建单个目录:os.mkdir(“test”)
20.获取文件属性:os.stat(file)
21.修改文件权限与时间戳:os.chmod(file)
22.终止当前进程:os.exit()
23.获取文件大小:os.path.getsize(filename)
二、文件操作方法大全: 1.os.mknod(“test.txt”)             #创建空文件
2.fp =
open(“test.txt”,w)          #直接打开一个文件,如果文件不存在则创建文件
3.关于open 模式:

python的文件操作方法汇总,

文件的读操作

示例:

 print("->文件句柄的获取,读操作:")

 f = open('无题','r',encoding='utf8')
 d = f.read()
 f.close()
 print(d)

 print('->例二:')
 f = open('无题','r',encoding='utf8')
 e = f.read(9)
 f.close()
 print(e)
 #python3中,文件中一个中英文都占位1

运行结果:

复制代码

->文件句柄的获取,读操作:
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
->例二:
昨夜星辰昨夜风
画

文件的写操作

知识点:

    1. 写操作前,文件先格式化清空文件

    2.清空操作,在执行open的w方法后,清空

print("写的操作,写文件的时候,不能调用读方法,读文件的时候,不能调用写方法")

f = open('python','w',encoding='utf8')
f.write("I must learn python \nbecause, python is important \n")
f.write("java is better?")
f.write("maybe") #上面的语句,没有加换行符,所以输出的内容是紧接的
f.close()

运行结果:

打开文件后显示如下

I must learn python 
because, python is important 
java is better?maybe

文件的append方法

语法格式:

f = open('文件名','a','encoding = utf8')

文件这种方法为追加模式:1, 空白文件中,直接从头开始写入内容; 2
有内容的文件,会在末尾开始继续写入内容

示例:

f = open('python','a',encoding='utf8')
f.write("花开又花落")
f.close()

运行结果:

I must learn python 
because, python is important 
java is better?maybe花开又花落

readline 和 readlines

 readline是逐行读取

readlines是全文读取

示例:

 print("readline方法")
 f = open('无题','r',encoding='utf8')
 a = f.readline()
 print("此时光标位置:",f.tell())
 b = f.readline()
 print("此时光标位置:",f.tell())
 print(a.strip()) #strip是字符串方法中去除空格和换行的方法
 print(b.strip())


 print("readlines方法,会将每行的内容组成一个列表打印")
 f = open('无题','r',encoding='utf8')
 c = f.readlines()
 print(c)
 print(id(c))
 print(id(f))
 for i in c:
  print(i.strip())
 print("遍历方法")
 f.seek(0)
 for i in f:
  print(i.strip())
 f.close() #文件的操作中,close()方法一定不能忘记

运行结果:

readline方法
此时光标位置: 23
此时光标位置: 46
昨夜星辰昨夜风
画楼西畔桂堂东
readlines方法,会将每行的内容组成一个列表打印
['昨夜星辰昨夜风\n', '画楼西畔桂堂东\n', '身无彩凤双飞翼\n', '心有灵犀一点通']
37826824
5344280
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
遍历方法
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通

文件的tell() 和 seek()方法

 示例:

f = open('无题','r',encoding='utf8')
f.read(4)
print('当前光标位置',f.tell())

f.seek(10)
print('当前光标位置',f.tell())
f.close()

#read时,一个中文算三个字符

运行结果:

当前光标位置 12
当前光标位置 10

文件操作之flush方法

import sys,time

for i in range(20):
 sys.stdout.write("#")
 sys.stdout.flush()
 time.sleep(1)

truncate方法

f = open('test','w')
f.write("hello")
f.write("\n")
f.write("python")
f.flush() #这样不用执行close方法,内存中的数据,就会写入到disk
f.close()

f = open('test','a')
f.truncate(2) #截断方法,光标从2开始往后截取
f.close()

其他的文件方法: r+ 读写方法

基于字符read & write

最基本的文件操作当然就是在文件中读写数据。这也是很容易掌握的。现在打开一个文件以进行写操作:

fileHandle = open ( 'test.txt', 'w' )

‘w’是指文件将被写入数据,语句的其它部分很好理解。下一步就是将数据写入文件:

fileHandle.write ( 'This is a test.\nReally, it is.' )

这个语句将“This is a test.”写入文件的第一行,“Really, it
is.”写入文件的第二行。最后,我们需要做清理工作,并且关闭文件:

fileHandle.close()

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

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

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

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

以上语句将读取整个文件并显示其中的数据。

基于行的读写 line

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

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

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

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

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

文件的读操作 示例:
print(“-文件句柄的获取,读操作:”) f = open(‘无题’,’r’,encoding=’utf8′) d
= f.read() f.close() print(d…

w:以写方式打开,
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )
w:以写方式打开,
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )

fp.read([size])                     #size为读取的长度,以byte为单位
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.flush()                          #把缓冲区的内容写入硬盘
fp.fileno()                         #返回一个长整型的”文件标签“
fp.isatty()                        
#文件是否是一个终端设备文件(unix系统中的)
fp.tell()                          
#返回文件操作标记的当前位置,以文件的开头为原点
fp.next()                          
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in
file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence])           
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size])                
#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
三、目录操作方法大全
1.创建目录
os.mkdir(“file”)                   
2.复制文件:
shutil.copyfile(“oldfile”,”newfile”)       
#oldfile和newfile都只能是文件
shutil.copy(“oldfile”,”newfile”)           
#oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
3.复制文件夹:
4.shutil.copytree(“olddir”,”newdir”)       
#olddir和newdir都只能是目录,且newdir必须不存在
5.重命名文件(目录)
os.rename(“oldname”,”newname”)             
#文件或目录都是使用这条命令
6.移动文件(目录)
shutil.move(“oldpos”,”newpos”)   
7.删除文件
os.remove(“file”)
8.删除目录
os.rmdir(“dir”)                             #只能删除空目录
shutil.rmtree(“dir”)                       
#空目录、有内容的目录都可以删
9.转换目录
os.chdir(“path”)                            #换路径
四、文件综合操作实例
将文件夹下所有图片名称加上’_fc’
python代码:

fp.read([size])                     #size为读取的长度,以byte为单位
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.flush()                          #把缓冲区的内容写入硬盘
fp.fileno()                         #返回一个长整型的”文件标签“
fp.isatty()                        
#文件是否是一个终端设备文件(unix系统中的)
fp.tell()                          
#返回文件操作标记的当前位置,以文件的开头为原点
fp.next()                          
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in
file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence])           
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size])                
#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
三、目录操作方法大全
1.创建目录
os.mkdir(“file”)                   
2.复制文件:
shutil.copyfile(“oldfile”,”newfile”)       
#oldfile和newfile都只能是文件
shutil.copy(“oldfile”,”newfile”)           
#oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
3.复制文件夹:
4.shutil.copytree(“olddir”,”newdir”)       
#olddir和newdir都只能是目录,且newdir必须不存在
5.重命名文件(目录)
os.rename(“oldname”,”newname”)             
#文件或目录都是使用这条命令
6.移动文件(目录)
shutil.move(“oldpos”,”newpos”)   
7.删除文件
os.remove(“file”)
8.删除目录
os.rmdir(“dir”)                             #只能删除空目录
shutil.rmtree(“dir”)                       
#空目录、有内容的目录都可以删
9.转换目录
os.chdir(“path”)                            #换路径
四、文件综合操作实例
将文件夹下所有图片名称加上’_fc’
python代码:

 1 # -*- coding:utf-8 -*-
 2 import re
 3 import os
 4 import time
 5 #str.split(string)分割字符串
 6 #'连接符'.join(list) 将列表组成字符串
 7 def change_name(path):
 8     global i
 9     if not os.path.isdir(path) and not os.path.isfile(path):
10         return False
11     if os.path.isfile(path):
12         file_path = os.path.split(path) #分割出目录与文件
13         lists = file_path[1].split('.') #分割出文件与文件扩展名
14         file_ext = lists[-1] #取出后缀名(列表切片操作)
15         img_ext = ['bmp','jpeg','gif','psd','png','jpg']
16         if file_ext in img_ext:
17             os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
18             i+=1 #注意这里的i是一个陷阱
19         #或者
20         #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
21         #if file_ext in img_ext:
22         #    print('ok---'+file_ext)
23     elif os.path.isdir(path):
24         for x in os.listdir(path):
25             change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
26 img_dir = 'D:\xx\\xx\images'27 start = time.time()
28 i = 0
29 change_name(img_dir)
30 c = time.time() - start
31 print('程序运行耗时:%0.2f'%(c))
32 print('总共处理了 %s 张图片'%(i))
 1 # -*- coding:utf-8 -*-
 2 import re
 3 import os
 4 import time
 5 #str.split(string)分割字符串
 6 #'连接符'.join(list) 将列表组成字符串
 7 def change_name(path):
 8     global i
 9     if not os.path.isdir(path) and not os.path.isfile(path):
10         return False
11     if os.path.isfile(path):
12         file_path = os.path.split(path) #分割出目录与文件
13         lists = file_path[1].split('.') #分割出文件与文件扩展名
14         file_ext = lists[-1] #取出后缀名(列表切片操作)
15         img_ext = ['bmp','jpeg','gif','psd','png','jpg']
16         if file_ext in img_ext:
17             os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
18             i+=1 #注意这里的i是一个陷阱
19         #或者
20         #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
21         #if file_ext in img_ext:
22         #    print('ok---'+file_ext)
23     elif os.path.isdir(path):
24         for x in os.listdir(path):
25             change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
26 img_dir = 'D:\xx\\xx\images'27 start = time.time()
28 i = 0
29 change_name(img_dir)
30 c = time.time() - start
31 print('程序运行耗时:%0.2f'%(c))
32 print('总共处理了 %s 张图片'%(i))

输出结果:

输出结果:

1 程序运行耗时:0.50
2 总共处理了 41 张图片
1 程序运行耗时:0.50
2 总共处理了 41 张图片

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图