python如何对文件进行操作
这篇文章将为大家详细讲解有关python如何对文件进行操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
首先看看在pycharm输入文件句柄,怎样显示他的定义
f = open('student_msg', encoding='utf-8', mode='a+') # 打开一个文件,赋值给f
print(type(f), f) # f文件句柄是属于一个类叫
print(dir(f)) # 打印这个类的所有属性和方法
['_CHUNK_SIZE', 'class', 'del', 'delattr', 'dict', 'dir', 'doc', 'enter', 'eq', 'exit', 'format', 'ge', 'getattribute', 'getstate', 'gt', 'hash', 'init', 'init_subclass', 'iter', 'le', 'lt', 'ne', 'new', 'next', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
print(f.dict) # f 这个实例化对象中的属性 {'mode': 'a+'}
源码对其的解释定义
'''
========= ===============================================================
Character Meaning
'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) 可读可写========= ===============================================================
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
文件的操作使用的频率还是很高,这几种方法很容易弄混,为了避免以后出现偏差,现在我把几种常用的方法整理透。
一,.readline() 和 .readlines() 目的是浏览,查找文件中的内容用什么模式。先看用六种方式执行的结果。
在register文件中有以下内容,看下分别执行这六种方式返回的结果
"'
这些是文件中的内容
dumingjun
mickle|male
"'
mode='r'
with open('register', encoding='utf-8', mode='r') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件中内容无变化)
'''
这些是文件中的内容
['dumingjun\n', 'mickle|male']
'''
mode='r+'
with open('register', encoding='utf-8', mode='r+') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件中内容无变化)
'''
这些是文件中的内容 # 先读了一行
['dumingjun\n', 'mickle|male'] # 然后往下执行,把每行作为一个字符串放入列表这个容器中,换行符为\n
'''
mode='w'
with open('register', encoding='utf-8', mode='w') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件中已经没有内容了)
'''
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable # 报错原因:'w'模式是无法读的,只要看到'w',先把文件全清空
'''
mode='w+'
with open('register', encoding='utf-8', mode='w+') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件内容已经为空)
'''
先清空,然后接下来执行了f.readline() 由于为空,所以返回了空的字符
[] # 接下来执行f.readlines(), 返回一个空列表
'''
mode='a'
with open('register', encoding='utf-8', mode='a') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件内容不变)
'''
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable # 报错原因,'a'模式只能add,增加,不可读,因为'a'模式进去时光标自动放在文件的末尾。
'''
mode='a+'
with open('register', encoding='utf-8', mode='a+') as f:
print(f.readline())
print(f.readlines())
运行结果:(文件内容不变)
'''
因为光标是放在最后,所以读取的内容为空
[] # 同理redlines()返回的是一个空列表。
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
以上代码的内容显示在图片上:
这里写图片描述
这里写图片描述
这里写图片描述
总结
这里写图片描述
阅读,查找相关内容,只能用'r'或 'r+'模式
二 现在要新建一个文件,并且添加内容,先看看五种方法运行的结果
'''
创建名为'msg'的文件,并写入内容以下内容:
'Duminjun is swimming\n今晚吃鸡'
'''
r模式就不用试了,r只能读,试试r+模式
with open('msg9', encoding='utf-8', mode='r') as f:
f.write('Duminjun is swimming\n今晚吃鸡')
运行结果:
'''
Traceback (most recent call last):
with open('msg', encoding='utf-8', mode='r+') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'msg' # 没有名为'msg'的文件,证明r+模式不可添加文件
'''
a 模式
with open('msg', encoding='utf-8', mode='a') as f:
f.write('Duminjun is swimming\n今晚吃鸡')
#
运行结果(已经在本目录添加了'msg'的文件,并且打开文件显示了以下内容:
'''
Duminjun is swimming # a 模式可以创建文件并写入
今晚吃鸡
'''
a+模式
with open('msg', encoding='utf-8', mode='a+') as f:
f.write('Duminjun is swimming\n今晚吃鸡')
运行结果:和以上a运行结果一样
w模式
with open('msg', encoding='utf-8', mode='w') as f:
f.write('Duminjun is swimming\n今晚吃鸡')
结果:和a模式一样
w+ 模式
with open('msg4', encoding='utf-8', mode='w+') as f:
f.write('Duminjun is swimming\n今晚吃鸡')
运行结果:和a模式行的结果一样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
图示:
这里写图片描述
三 如果有名为'msg'的文件里面有'Duminjun is swimming\n今晚吃鸡'这些内容,现在要增加以下内容
'\nLaura is a playing tennis,What are you dong?' 试试这几种方法的效果
r
with open('msg', encoding='utf-8', mode='r') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果:
'''
Traceback (most recent call last):
f.write('\nLaura is a playing tennis,What are you dong?')
io.UnsupportedOperation: not writable # f这个实例化对象中没有可读这一属性
'''
r +
with open('msg', encoding='utf-8', mode='r+') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果:(没有报错,文件内容如下:)
'''
Laura is a playing tennis,What are you dong?s swimming
今晚吃鸡 # 添加的内容已经插入到了最前面,r+模式可以写入文件,但是进入文件句柄时光标在最前面
'''
如果想要r+模式增加内容到文末,可以先读完全部内容,光标就到了最后,然后在把内容写入文件
with open('msg', encoding='utf-8', mode='r+') as f:
f.readlines()
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果(文件内容如下):
'''
Duminjun is swimming
今晚吃鸡
Laura is a playing tennis,What are you dong?
'''
w
with open('msg', encoding='utf-8', mode='w') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果,文件中显示以下内容:
'''
Laura is a playing tennis,What are you dong? # 原文件内容全部清空,写入了新增加的内容
'''
w+
with open('msg', encoding='utf-8', mode='w+') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果:和w运行结果一样
a
with open('msg', encoding='utf-8', mode='a') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
#
运行结果,文件内容如下
'''
Duminjun is swimming
今晚吃鸡
Laura is a playing tennis,What are you dong? # 已经成功到文末
'''
a+
with open('msg', encoding='utf-8', mode='a+') as f:
f.write('\nLaura is a playing tennis,What are you dong?')
运行结果:和a模式结果一样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
图示
这里写图片描述
这里写图片描述
四,例题:写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
def modify_update():
file_name = input('please input the file name: ').strip()
modify_content = input('please input the content to modified: ')
new_content = input('please input new content you want to replace: ')
with open('{}'.format(file_name), encoding='utf-8', mode='r+') as f, \
open('msk5', encoding='utf-8', mode='w+') as f1: # 打开两个文件句柄,一个读原文档,一个写入修改后的内容
for i in f:
f1.write(i.replace('{}'.format(modify_content), '{}'.format(new_content)))
边循环原文件每一行,边添加新的一行到另外一个文件,如果replace没有找到旧词,字符串不会做任何修改,所以不用if...else语句
'''
w,w+在一个句柄里操作不会每次都清空,只有重新以w,w+模式打开一个句柄并且使用f.write()才会清空,就是说两个句柄是没有
关于"python如何对文件进行操作"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。