一、对文件操作流程
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
=  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
#按行循环,并且将第五行替换
=  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
#打开一个文件,修改完了写到一个新文件
=  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
=  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
=  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)      #从头开始截取多少字符