文件操作--python

前言:

python文件操作和c语言类似,有open、close等接口。有r、w、a等读写模式

 

1- 文件打开关闭

语法:

#文件打开
文件句柄 = open(文件路径, 读写模式)

#文件关闭
文件句柄.close()

 

示例:

import os

file_name = "log.txt"
try:
    file = open(file_name, 'w+')
except OSError as e:
    print("open file fail")
else:
    print("open file succ")
    #读写文件
    file.write("hello")
    file.seek(0, 0)
    content = file.read()
    print(content)
    file.close()

按文件路径打开文件

fname = r'D:\code\python\fname.txt'
f = open(fname, 'a+')
f.write("path file")
f_pos = f.seek(0, 0)
print(f_pos)
content = f.read()
print(content)
f.close()

 

实际过程中,如果文件存在,打开文件常使用 with open() as 文件句柄的方式。这样写是因为with open as的方式自动给我们关闭文件,不用自己手动调用close接口。

import os

file_name = "log.txt"
try:
    with open(file_name, 'w+') as file:
        #读写文件
        file.write("hello")
        file.seek(0, 0)
        content = file.read()
        print(content)
except OSError as e:
    print("open file fail")

 

2- 文件读写模式

基本的读写模式只有读r、写w,在此基础上衍生出a、x两种模式,在读写模式基础上可以附加+和b两种标志。

读写模式:

r:只读(不可写)方式打开,如果文件不存在,报错

w:写入不可读)模式打开,如果文件不存在则创建。写入的内容会覆盖掉原有内容(文件打开后内容被清空)。

a:以追加(不可读)方式写文件,如果文件不存在则创建不会覆盖原有内容,新内容写在文件末尾。特殊的w

x:以独占方式打开文件,如果文件已存在则抛异常,如果文件不存在则创建(以写模式(不可读)打开)。(不常用)

 

附加与读写模式的标志:

b:二进制文件需加上此选项。rb、wb、ab、xb
+: 更新文件。即文件以读写方式打开。例如r+、w+都可以以读写方式打开。
    r+:以读写方式打开文件,如果文件不存在则抛异常,和r一样。写文件则以追加方式写。如果不加+,只可读不可写文件。
    w+:以读写方式打开文件,如果文件不存在则创建,写入的内容会覆盖掉原有内容(文件打开后内容被清空),和w一样。只是增加了可以读取文件的属性。
    a+:以读写方式打开文件,如果文件不存在则创建,写入的新内容写在文件末尾,和a一样。只是增加了读属性。注意读取文件时,指针在文件末尾,是读不到东西的。

 

注意:

如果文件不存在创建的选项有:w、x(文件必须没有被其他文件打开)、a

模式rr+ww+aa+
++ + +
 +++++
创建文件  ++++
覆盖原有内容  ++  
指针在开始++++  
指针在结尾    ++

 

示例:

自己修改下r、w、a、x和 +的组合试下效果

import os

file_name = "log.txt"
try:
    file = open(file_name, 'r')
except OSError as e:
    print("open file file")
    exit(1)
 
try: 
    file.write('hello world\n ')
except OSError as e:
    print("write file fail")
    file.close()
    exit(1)
    
#设置文件光标位置
position = file.tell()
print(position)
position = file.seek(0, 0)
print("file pos:{0}".format(position))

try:
    content = file.read()
    print("file contest:{0}".format(content))
except OSError as e:
    print("open file fail")
    file.close()
    exit(1)

file.close()

 

书上给的示例如下,嵌套太多了

import os

file_name = "log.txt"
try:
    file = open(file_name, 'r')
except OSError as e:
    print("open file fail")
else:
    print("open file succ")

    #读写文件
    try:
        content = file.read()
        print("file contest:{0}".format(content))
        print("\n")
    except OSError as e:
        print("file read fail")    
    finally:
        file.close()

如果要读写二进制文件,可以使用b的模式,但是写字符串是需要加上b'字符内容'

import os

file_name = "log.txt"
try:
    file = open(file_name, 'wb+')
except OSError as e:
    print("open file file")
    exit(1)
 
try: 
    file.write(b'hello world\n ')
except OSError as e:
    print("write file fail")
    file.close()
    exit(1)
    
#设置文件光标位置
position = file.tell()
print(position)
position = file.seek(0, 0)
print("file pos:{0}".format(position))

try:
    content = file.read()
    print("file contest:{0}".format(content))
except OSError as e:
    print("open file fail")
    file.close()
    exit(1)

file.close()

 

3- 文件读写接口

只列出不试验了,搬运自菜鸟教程

file.closed返回true如果文件已被关闭,否则返回false。
file.mode返回被打开文件的访问模式。
file.name返回文件的名称。
file.softspace如果用print输出后,必须跟一个空格符,则返回false。否则返回true。
序号方法及描述
1

file.close()

关闭文件。关闭后文件不能再进行读写操作。

2

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

5

file.next()

返回文件下一行。

6

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

7

file.readline([size])

读取整行,包括 "\n" 字符。

8

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

9

file.seek(offset[, whence])

设置文件当前位置

10

file.tell()

返回文件当前位置。

11

file.truncate([size])

截取文件,截取的字节通过size指定,默认为当前文件位置。

12

file.write(str)

将字符串写入文件,返回的是写入的字符长度。

13

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

 

 

4- os模块的文件操作方法

搬运自菜鸟教程

序号方法及描述
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的文件的文件系统的信息,像 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]])


返回唯一的路径名用于创建临时文件。
57

os.tmpfile()


返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
58

os.tmpnam()


为创建一个临时文件返回一个唯一的路径
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 模块


获取文件的属性信息。

 

5- os.path的文件操作

方法说明
os.path.abspath(path)返回绝对路径
os.path.basename(path)返回文件名
os.path.commonprefix(list)返回list(多个路径)中,所有path共有的最长的路径
os.path.dirname(path)返回文件路径
os.path.exists(path)如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.lexists路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)根据环境变量的值替换path中包含的"$name"和"${name}"
os.path.getatime(path)返回最近访问时间(浮点型秒数)
os.path.getmtime(path)返回最近文件修改时间
os.path.getctime(path)返回文件 path 创建时间
os.path.getsize(path)返回文件大小,如果文件不存在就返回错误
os.path.isabs(path)判断是否为绝对路径
os.path.isfile(path)判断路径是否为文件
os.path.isdir(path)判断路径是否为目录
os.path.islink(path)判断路径是否为链接
os.path.ismount(path)判断路径是否为挂载点
os.path.join(path1[, path2[, ...]])把目录和文件名合成一个路径
os.path.normcase(path)转换path的大小写和斜杠
os.path.normpath(path)规范path字符串形式
os.path.realpath(path)返回path的真实路径
os.path.relpath(path[, start])从start开始计算相对路径
os.path.samefile(path1, path2)判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path)把路径分割成 dirname 和 basename,返回一个元组
os.path.splitdrive(path)一般用在 windows 下,返回驱动器名和路径组成的元组
os.path.splitext(path)分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path)把路径分割为加载点与文件
os.path.walk(path, visit, arg)遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames设置是否支持unicode路径名

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值