python文件的操作

首先看看在pycharm输入文件句柄,怎样显示他的定义

f = open(‘student_msg‘, encoding=‘utf-8‘, mode=‘a+‘) # 打开一个文件,赋值给f

print(type(f), f) # f文件句柄是属于一个类叫<class ‘_io.TextIOWrapper‘>,也是可迭代对象。(io ---> input and out)

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()才会清空,就是说两个句柄是没有

原文地址:http://blog.51cto.com/13941647/2166382

时间: 2024-10-08 15:30:44

python文件的操作的相关文章

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r

~~Python文件简单操作~~

进击のpython Python文件操作 在说Python的文件操作之前 我们可以先思考一个问题 平时我们是怎么对电脑中的文件进行操作的呢? 打开电脑?找到文件?打开文件?读文件?修改文件?保存文件?关闭文件 对吧,这就是我们打开文件的基本流程 而 Python 打开文件的方式,也是这样的 打开电脑 ? f=open(filename) ? f.read() ? f.write() ? f.close() f = open(filename):打开文件 f.read():读文件 f.write(

Python 文件常见操作

[python] view plain copy print? # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() 去掉文件名, 返回目录路径 join() 将分离的各部分组合成一个路径名 split() 返回 (dirname(), basename()) 元组 splitdrive() 返回 (drivename, pathname) 元组 sp

12、python文件的操作

前言:本文主要介绍python中文件的操作,包括打开文件.读取文件.写入文件.关闭文件以及上下文管理器. 一.打开文件 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出一个OSError. 使用方法:open(参数1,参数2,参数3) 参数1:文件名 参数2:打开的模式 参数3:编码方式(encoding = "utf-8") 模式 描述 r 以只读方式打开文件,文件指针默认放在文件开头 rb 以二

python 文件读写操作

读open打开文件后一定要记得调用文件对象的close()方法,用try/finally语句来确保最后能关闭文件不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法file_name = open('test.file')读取所有内容file_object = open('thefile.txt')try:all_the_text = file_object.read( )finally:file_object.close( )读固

python 文件常用操作

1.打开文件 open()打开文件并返回文件对象,参数很多,一般用前两个,open(file,mode).file可以是文件名或者文件目录下的文件名,mode为打开的方式,可以是只读.写入.追加写入.可读可写等等. 打开某个文件,需要知道该文件的目录,或者该文件就在当前的工作目录下. (1)包含目录的文件名(不修改当前工作目录) >>> f=open('E:/python/record.txt') #或者f=open(r'E:\python\record.txt') #或者f=open(

python文件读写操作

代码: [email protected]:/study/python# cat write.py #!/usr/bin/python output_file = open("test.txt","w") output_file.write("write test\n") output_file.close() output_file = open("test.txt","a") output_file.w

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

python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! 1 #coding=utf-8 2 #!/usr/bin/python 3 import os 4 import time 5 #python执行linux命令 6 os.system(':>./aa.py') 7 #人机交互输入 8 S = raw_input("input:") 9 os.environ['S']=str(S) 10 #把字符串S写入文件 11 outpu

python 文件综合操作

"' 目的:综合文件操作相关属性设计示例 示例说明:本示例主要目的是将给定目录下所有满足条件的文件进行压缩,并且以当前时间为名称,如果已经存在,则继续压缩到之前目录,如果不存在,则以当前时间为名称 作者:琦琦爸爸 '" #coding:utf-8 import datetime import os import zipfile #按现在时间为压缩文件取名 def make_name(): #获取当前时间,包括年月日时分秒 i=str(datatime.datatime.now()) #