一、对文件操作流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过文件句柄对文件进行操作
3.关闭文件
二、文件打开模式
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
|
f
=
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
)
#打开文件,“读模式”,只能读,得到文件句柄并赋值给一个变量
print
(f.read())
#读文件所有内容,读完之后文件光标跳到最后,文件大时慎用
f.close()
f1
=
open
(
"file_test"
,
"w"
,encoding
=
"utf-8"
)
#写模式,会新建一个file_test文件,再往里写入
f1.write(
"-------------"
)
f1.close()
f2
=
open
(
"file_test"
,
"a"
,encoding
=
"utf-8"
)
#追加模式,在原文件内容最后追加,无原文件则新建
f2.write(
"-------------"
)
f2.close()
f3
=
open
(
"file_test"
,
"r+"
,encoding
=
"utf-8"
)
#读写模式,写在原文件内容最后追加,无原文件则新建
print
(f3.readline())
#按行读
print
(f3.readline())
print
(f3.readline())
#打印前三行,这个时候光标移动到第三行位置
print
(f3.tell())
#打印光标位置
f3.write(
"--------------"
)
#但是写入还是文件内容最后写入
f3.close()
f4
=
open
(
"file_test"
,
"w+"
,encoding
=
"utf-8"
)
#写读模式,,只要是“写在前”都会建一个新文件,在写入
f4.write(
"----------------------\n"
)
f4.write(
"----------------------\n"
)
f4.write(
"----------------------\n"
)
f4.seek(
10
)
#光标移动到10的位置
f4.write(
"test4"
)
#再写入会将原内容覆盖
f4.seek(
0
)
#将光标移动到开头的位置
print
(f4.read())
f4.close()
#输出
#----------ni hao -----
#----------------------
#----------------------
f5
=
open
(
"file_test"
,
"a+"
,encoding
=
"utf-8"
)
#追加读模式,在原文件内容最后追加,无原文件新建
f5.write(
"----------------------\n"
)
f5.write(
"----------------------\n"
)
f5.write(
"----------------------\n"
)
f5.seek(
10
)
#光标移动到10的位置
f5.write(
"test5"
)
#再写入会在文件内容最后写入
f5.seek(
0
)
print
(f5.read())
f5.close()
f6
=
open
(
"file_test"
,
"rb"
)
#以二进制文件格式读这个文件
print
(f6.readline())
print
(f6.readline())
print
(f6.readline())
f6.close()
f7
=
open
(
"file_test"
,
"ab"
)
#以二进制文件格式追加这个文件
f7.write(
"-------------------\n"
.encode())
#encode 将str字符转换为bytes
f7.write(
"-------------------\n"
.encode())
f7.write(
"-------------------\n"
.encode())
f7.close()
f8
=
open
(
"file_test"
,
"wb"
)
#以二进制文件格式写这个文件
f8.write(
"-------------------\n"
.encode())
#encode 将str字符转换为bytes
f8.write(
"-------------------\n"
.encode())
f8.write(
"-------------------\n"
.encode())
f8.close()
#注:还有rU或r+U模式,"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
|
三、文件循环
1
2
3
4
5
6
7
8
9
10
11
12
|
#按行循环,并且将第五行替换
f
=
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
)
count
=
0
for
line
in
f:
count
+
=
1
if
count
=
=
5
:
print
(
"----分割线----"
)
continue
print
(line.strip())
#strip是去除行首行尾的空格符和换行符
f.close()
#f.readlines() #切记用f.readlines是先将文件转换为列表,如果文件太大时对内存消耗太大
|
四、文件的修改
1
2
3
4
5
6
7
8
9
|
#打开一个文件,修改完了写到一个新文件
f
=
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
)
f_new
=
open
(
"file_new"
,
"w"
,encoding
=
"utf-8"
)
for
line
in
f:
#按行取出,每行都是一串字符串
if
"fengxiaoli"
in
line:
line
=
line.replace(
"fengxiaoli"
,
"FENGXIAOLI"
)
#对字符串进行操作,J
f_new.write(line)
f.close()
f_new.close()
|
五、flush方法
1
2
3
4
5
|
f
=
open
(
"file_test"
,
"w"
,encoding
=
"utf-8"
)
f.write(
"hello\n"
)
f.write(
"hello\n"
)
f.write(
"hello\n"
)
f.flush()
#当往文件写内容的时候,会有一个缓存,达到一个时间,一次往文件写入。如果这时候断电可能内容并没有写入成功,flush刷新会立即执行
|
六、with语句
1
2
3
4
5
6
|
#with语句作用,为了避免打开文件后忘记关闭
with
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
) as f:
#类似于f = open("file_test","r",encoding="utf-8")
with
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
) as f, \
#还可以同时打开多个文件
open
(
"file_test2"
,
"r"
,encoding
=
"utf-8"
) as f2:
|
七、其他操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
f
=
open
(
"file_test"
,
"r"
,encoding
=
"utf-8"
)
print
(f.tell())
#打印光标位置,按字符计数
print
(f.readline())
#按行读
print
(f.read(
10
))
#按字符读
print
(f.tell())
f.seek(
0
)
#把光标回到开头
f.seek(
12
)
#把光标移动到12个字符的位置
print
(f.readline())
print
(f.encoding)
#打印文件编码
print
(f.isatty())
#判断文件是否是终端设备,返回Ture or false
print
(f.seekable())
#判断是否能移动文件光标,返回Ture or false
print
(f.readable())
#判断文件是否可读
print
(f.writable())
#判断文件是否可写
# f = open("file_test","a",encoding="utf-8")
# f.truncate(12) #从头开始截取多少字符
|
本文转自 fxl风 51CTO博客,原文链接:http://blog.51cto.com/fengxiaoli/2066121