File(文件) 方法
open() 方法
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
#完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:
mode 参数有:
help(open)
f = open('D:\\水调歌头.txt')
print(f)
结果:
<_io.TextIOWrapper name=‘D:\水调歌头.txt’ mode=‘r’ encoding=‘cp936’>
f = open('D:\\水调歌头.txt')
for each in f:
print(each)
结果:
水调歌头·明月几时有
宋代:苏轼
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?
转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
file 对象
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
1 file.close()
close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
# 打开文件
f = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
# 关闭文件
f.close()
结果:
文件名为: D:\水调歌头.txt
2 file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
f = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
# 刷新缓冲区
f.flush()
# 关闭文件
f.close()
结果:
文件名为: D:\水调歌头.txt
3 file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
# 打开文件
f = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
fid = f.fileno()
print ("文件描述符为: ", fid)
# 关闭文件
f.close()
#结果
文件名为: D:\水调歌头.txt
文件描述符为: 5
4 file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。
f = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
ret = f.isatty()
print ("返回值 : ", ret)
# 关闭文件
f.close()
#结果:
文件名为: D:\水调歌头.txt
返回值 : False
5 file.next()
Python 3 中的 File 对象不支持 next() 方法。
返回文件下一行。
6 file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。
# 打开文件
f = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
line = f.read(30)
print ("读取的字符串: %s" % (line))
# 关闭文件
f.close()
#结果:
文件名为: D:\水调歌头.txt
读取的字符串: 水调歌头·明月几时有
宋代:苏轼
丙辰中秋,欢饮达旦,大醉,
7 file.readline([size])
读取整行,包括 “\n” 字符。
fo = open('D:\\水调歌头.txt')
print("文件名为: ", f.name)
line = fo.readline()
print ("读取第一行 %s" % (line))
line = fo.readline(5)
print ("读取的字符串为: %s" % (line))
# 关闭文件
fo.close()
#结果:
文件名为: D:\水调歌头.txt
读取第一行 水调歌头·明月几时有
读取的字符串为: 宋代:苏轼
8 file.readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
fo = open('D:\\水调歌头.txt')
print("文件名为: ", fo.name)
for line in fo.readlines(): #依次读取每行
line = line.strip() #去掉每行头尾空白
print ("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
#结果:
文件名为: D:\水调歌头.txt
读取的数据为: 水调歌头·明月几时有
读取的数据为: 宋代:苏轼
读取的数据为: 丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
读取的数据为: 明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?
读取的数据为: 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
9 file.seek(offset[, whence])
移动文件读取指针到指定位置
fo = open('D:\\水调歌头.txt')
line = fo.readline()
print ("读取的数据为: %s" % (line))
line = fo.readline()
print ("读取的数据为: %s" % (line))
# 重新设置文件读取指针到开头
fo.seek(0, 0)
line = fo.readline()
print ("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
#结果:
读取的数据为: 水调歌头·明月几时有
读取的数据为: 宋代:苏轼
读取的数据为: 水调歌头·明月几时有
10 file.tell()
返回文件当前位置。
fo = open('D:\\水调歌头.txt')
line = fo.readline()
pos = fo.tell()
print ("当前位置: %d" % (pos))
# 关闭文件
fo.close()
结果:
当前位置: 22
11 file.truncate([size])
从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
fo = open('D:\\水调歌头.txt', "r+")
print ("文件名: ", fo.name)
line = fo.readline()
print ("读取行: %s" % (line))
fo.truncate()
line = fo.readlines()
print ("读取行: %s" % (line))
# 关闭文件
fo.close()
#结果如下:
文件名: D:\水调歌头.txt
读取行: 水调歌头·明月几时有
读取行: ['宋代:苏轼\n', '丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。\n', '明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?\n', '转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。']
12 file.write(str)
将字符串写入文件,返回的是写入的字符长度。
# 打开文件
fo = open("D:\\水调歌头.txt", "r+")
print ("文件名: ", fo.name)
str = "\n今已亭亭如盖"
# 在文件末尾写入一行
fo.seek(0, 2)
line = fo.write( str )
# 读取文件所有内容
fo.seek(0,0)
for index in range(6):
line = next(fo)
print ("文件行号 %d - %s" % (index, line))
# 关闭文件
fo.close()
#结果:
文件名: D:\水调歌头.txt
文件行号 0 - 水调歌头·明月几时有
文件行号 1 - 宋代:苏轼
文件行号 2 - 丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
文件行号 3 - 明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?
文件行号 4 - 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
文件行号 5 - 今已亭亭如盖
13 file.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
fo = open("D:\\水调歌头.txt", "w")
print ("文件名为: ", fo.name)
seq = ["黄梅 1\n", "佳节 2"]
fo.writelines( seq )
# 关闭文件
fo.close()
结果:
文件名为: D:\水调歌头.txt
OS 文件/目录方法
os.chdir() 方法
Python3 OS 文件/目录方法
概述
os.chdir() 方法用于改变当前工作目录到指定的路径。
import os, sys
path = "C:\\"
# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)
结果:
当前工作目录为 C:\Users\lenovo
目录修改成功 C:\
listdir() 方法
Python3 OS 文件/目录方法
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 ‘.’ 和’…’ 即使它在文件夹中。
只支持在 Unix, Windows 下使用。
import os, sys
path = "C:\\"
import os, sys
# 打开文件
path = "C:\\"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
print (file)
#结果:
$Recycle.Bin
AMTAG.BIN
anaconda
Documents and Settings
Gephi-0.9.2
hiberfil.sys
Intel
IntelOptaneData
LenovoDrivers
LenovoQMDownload
MaxReport
OneDriveTemp
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
swapfile.sys
System Volume Information
Users
Windows
os.makedirs() 方法
概述
os.makedirs() 方法用于递归创建目录。像 mkdir(), 但创建的所有intermediate-level文件夹需要包含子目录。
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily"
os.makedirs( path, 0o777 );
print ("路径被创建")#路径被创建
还有以下这些方法需要去了解学习。
1
os.access(path, mode)
检验权限模式
2
os.chdir(path)
改变当前工作目录
3
os.chflags(path, flags)
设置路径的标记为数字标记。
4
os.chmod(path, mode)
更改权限
5
os.chown(path, uid, gid)
更改文件所有者
6
os.chroot(path)
改变当前进程的根目录
7
os.close(fd)
关闭文件描述符 fd
8
os.closerange(fd_low, fd_high)
关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9
os.dup(fd)
复制文件描述符 fd
10
os.dup2(fd, fd2)
将一个文件描述符 fd 复制到另一个 fd2
11
os.fchdir(fd)
通过文件描述符改变当前工作目录
12
os.fchmod(fd, mode)
改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13
os.fchown(fd, uid, gid)
修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14
os.fdatasync(fd)
强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15
os.fdopen(fd[, mode[, bufsize]])
通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16
os.fpathconf(fd, name)
返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17
os.fstat(fd)
返回文件描述符fd的状态,像stat()。
18
os.fstatvfs(fd)
返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
19
os.fsync(fd)
强制将文件描述符为fd的文件写入硬盘。
20
os.ftruncate(fd, length)
裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21
os.getcwd()
返回当前工作目录
22
os.getcwdu()
返回一个当前工作目录的Unicode对象
23
os.isatty(fd)
如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24
os.lchflags(path, flags)
设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25
os.lchmod(path, mode)
修改连接文件权限
26
os.lchown(path, uid, gid)
更改文件所有者,类似 chown,但是不追踪链接。
27
os.link(src, dst)
创建硬链接,名为参数 dst,指向参数 src
28
os.listdir(path)
返回path指定的文件夹包含的文件或文件夹的名字的列表。
29
os.lseek(fd, pos, how)
设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30
os.lstat(path)
像stat(),但是没有软链接
31
os.major(device)
从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32
os.makedev(major, minor)
以major和minor设备号组成一个原始设备号
33
os.makedirs(path[, mode])
递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34
os.minor(device)
从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35
os.mkdir(path[, mode])
以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36
os.mkfifo(path[, mode])
创建命名管道,mode 为数字,默认为 0666 (八进制)
37
os.mknod(filename[, mode=0600, device])
创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
38
os.open(file, flags[, mode])
打开一个文件,并且设置需要的打开选项,mode参数是可选的
39
os.openpty()
打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40
os.pathconf(path, name)
返回相关文件的系统配置信息。
41
os.pipe()
创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42
os.popen(command[, mode[, bufsize]])
从一个 command 打开一个管道
43
os.read(fd, n)
从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44
os.readlink(path)
返回软链接所指向的文件
45
os.remove(path)
删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46
os.removedirs(path)
递归删除目录。
47
os.rename(src, dst)
重命名文件或目录,从 src 到 dst
48
os.renames(old, new)
递归地对目录进行更名,也可以对文件进行更名。
49
os.rmdir(path)
删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50
os.stat(path)
获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51
os.stat_float_times([newvalue])
决定stat_result是否以float对象显示时间戳
52
os.statvfs(path)
获取指定路径的文件系统统计信息
53
os.symlink(src, dst)
创建一个软链接
54
os.tcgetpgrp(fd)
返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55
os.tcsetpgrp(fd, pg)
设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56
os.tempnam([dir[, prefix]])
Python3 中已删除。返回唯一的路径名用于创建临时文件。
57
os.tmpfile()
Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
58
os.tmpnam()
Python3 中已删除。为创建一个临时文件返回一个唯一的路径
59
os.ttyname(fd)
返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
60
os.unlink(path)
删除文件路径
61
os.utime(path, times)
返回指定的path文件的访问和修改的时间。
62
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
输出在文件夹中的文件名通过在树中游走,向上或者向下。
63
os.write(fd, str)
写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
64
os.path 模块
获取文件的属性信息。
在接下来的日子里继续学习这些方法,一起努力!