Python3.x文件处理详解

                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

  任何一门语言都有其特有的操作文件的方式,Python2.x版本有两种操作文件的方式,没错就是open函数和file函数。但是在Python3.x版本处理文件就只剩下open函数啦(此处我们忽略with处理方法)。

 

一.打开文件的方式




python nc文件处理 气象 python文件处理_数据

python nc文件处理 气象 python文件处理_数据_02

1 尹正杰
2 韩森雨
3 贾山鹏


name.txt内容戳这里


1.以只读的方式打开



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 f1 = open("name.txt","r",encoding="utf-8")        #第一个参数是打开文件的名称,第二个参数是打开文件的方式是以只读的方式打开,第三个参数是指定打开的编码格式为“utf-8”。
 8 data = f1.read()                                   #一次性将数据都读取到出来并赋值。
 9 f1.close()                                         #关闭文件
10 
11 print(data)                                        #打印文件内容
12 
13 
14 
15 #以上代码执行结果如下:
16 尹正杰
17 韩森雨
18 贾山鹏



2.以二进制的方式打开文件



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 
 8 f1 = open("name.txt","rb")
 9 data = f1.read()
10 f1.close()
11 
12 print(data)
13 
14 
15 
16 #以上代码执行结果如下:
17 b'\xe5\xb0\xb9\xe6\xad\xa3\xe6\x9d\xb0\r\n\xe9\x9f\xa9\xe6\xa3\xae\xe9\x9b\xa8\r\n\xe8\xb4\xbe\xe5\xb1\xb1\xe9\xb9\x8f'



3.以写入的方式打开文件



1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:
5 #EMAIL:y1053419035@qq.com
6 
7 f2 = open("a.txt","w",encoding="utf-8")           #以写的方式打开文件,如果已经存在该文件就清空打开,如果不存在创建文件
8 f2.write("尹正杰")                                 #往文件写入字符串
9 f2.close()



   以上我们介绍了三种打开文件的方式,还有一种是以“a”的方式打开,即追加的方式打开文件,它也是属于写的一种类型,有以上三种基本上也就够用了,当然还有类似的“r+”(读写方式打开),“w+”(以写的方式打开并且还可以读),"a+"(以追加的方式打开且还可以读)。总而言之不建议这样用,权限不要放的太大,我们最好控制在只读,只写或者只追加的方式打开文件。对了,以上三种方式打开文件之后最好都要关闭文件,因为只有你关闭文件了数据才会网磁盘中写,否则可能延迟写入时间。如果你总是打开文件的时候忘记关闭也可以用with语句,其用法和open类似,下面我们看一下with 的用法。



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 
 8 with open("a.txt","r",encoding="utf-8") as f:           #用with语句打开一个文件,当其子代码块执行完毕时,文件会自动关闭。
 9     print(f.readlines(),end="")
10 
11 
12 print("\n","*" *20,"我是分割线","*" * 20,)
13 with open("a.txt","r",encoding="utf-8") as f1,open("b.txt","r",encoding="utf-8") as f2:         #用with语句可以同时打开多个文件
14     print(f1.read())
15     print(f2.read())
16 
17 
18 
19 
20 #以上代码执行结果如下:
21 ['尹正杰\n', '1111111\n', '333223333\n', '333333']
22  ******************** 我是分割线 ********************
23 尹正杰
24 1111111
25 333223333
26 333333
27 尹正杰
28 1111111
29 yinzhengjie
30 333333



 

二.读取文件的方式

 1.移动文件光标(seek)位置



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 f1 = open("name.txt","r",encoding="utf-8")             #第一个参数是打开文件的名称,第二个参数是打开文件的方式是以只读的方式打开,第三个参数是指定打开的编码格式为“utf-8”。
 8 data1 = f1.read()                                       #一次性将数据全部读取出来并赋值给data1。
 9 print(f1.closed)                                        #判断文件是否关闭,现在还没有关闭,其值应该为False
10 print("data1=====",data1)                               #打印读取到的内容
11 data2 = f1.read()                                       #由于上面我们已经将数据全部都去完毕了,所以此时data2是没法读取到数据的
12 f1.seek(0)                                              #将文件光标移动到文件开始,“0”表示文件的开始位置。
13 data3 = f1.read()                                       #data3是可以读取到数据的,因为上行代码已经将文件光标从末尾移动到开始位置
14 f1.close()                                             #关闭文件
15 print(f1.closed)                                       #此时文件已经关闭,再次判断文件是否关闭,其值应该为True
16 print("data2=====",data2)
17 print("data3=====",data3)
18 
19 
20 
21 
22 #以上代码执行结果如下:
23 False
24 data1===== 尹正杰
25 韩森雨
26 贾山鹏
27 True
28 data2===== 
29 data3===== 尹正杰
30 韩森雨
31 贾山鹏



 2.按行(readline)读取文件内容



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 f1 = open("name.txt","r",encoding="utf-8")
 8 print(f1.encoding)                                          #查看打开文件的编码格式。
 9 print(f1.name)                                               #查看文件名称
10 print(f1.readable())                                        #判断文件是否可读
11 print(f1.readline(),end='')                                 #一次性读取一行内容,并去掉换行符,即不打印换行符,
12 print(f1.readlines())                                       #从当前光标往下读取直到光标末尾,上面的readline已经读取了一行内容,此处的readlines会将没有读取的内容一次性读取完毕。
13 f1.close()      
14 
15 
16 
17 
18 #以上代码执行结果如下:
19 utf-8
20 name.txt
21 True
22 尹正杰
23 ['韩森雨\n', '贾山鹏']



3.告诉当前光标(tell)所在位置




python nc文件处理 气象 python文件处理_数据

python nc文件处理 气象 python文件处理_数据_02

1 ABCDEFG


c.txt文件内容戳这里


1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 
 8 with open("c.txt","rb") as f:
 9     print(f.read())
10     f.seek(3)           #默认情况,是以文件起始位置作为开始,往后移动三个字节(bytes)
11     print(f.tell())     #显示当前光标所在位置
12     f.read(1)           #表示只读取一个字节
13     print(f.tell())     #显示当前光标所在位置
14     f.seek(-5,2)        #后面的数字“2”表示光标从文件末尾所在的位置开始,前面的“-5”表示从当前位置前移动5个字节(bytes)
15     print(f.tell())
16     f.seek(2,1)         #后面的数字“1”表示以当前光标所在的位置,前面的“2”表示从当前位置往后移动2个字节。
17     print(f.tell())
18     print(f.read())
19 
20 
21 
22 
23 #以上代码执行结果如下:
24 b'ABCDEFG'
25 3
26 4
27 2
28 4
29 b'EFG'



 

三.写入文件的方式

1.创建文件并写入数据



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 f2 = open("a.txt","w",encoding="utf-8")                 #以写的方式打开文件,如果已经存在该文件就清空打开,如果不存在创建文件
 8 f2.write("尹正杰")                                       #往文件写入字符串
 9 f2.writelines(['\n1111111','\n22222','\n333333'])      #往文件中写入一个列表
10 f2.close()



 

四.文件操作小试牛刀

1.修改文件内容




python nc文件处理 气象 python文件处理_数据

python nc文件处理 气象 python文件处理_数据_02

1 尹正杰
2 1111111
3 22222
4 333333


a.txt文件内容戳这里


  要求将"a.txt"文件的内容包含“22222”的行换成字符串“yinzhengjie”并保存。



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 import os           #导入os模块。
 8 
 9 f1 = open("a.txt","r",encoding="utf-8")                 #以只读的方式打开一个文件
10 f2 = open(".a.txt.swap","w",encoding="utf-8")           #以写入的方式打开一个文件
11 for line in f1.readlines():
12     if  line.startswith("22222"):              #如果匹配到以5个“2”开头的行就就执行以下的修改操作,即对其新赋值。
13         line = "yinzhengjie\n"
14     f2.write(line)
15 f1.close()
16 f2.close()
17 
18 os.remove("a.txt")                                  #删除源文件
19 os.rename(".a.txt.swap",'a.txt')                   #将修改的文件内容进行改名操作。



 

2.实时监控一个文件内容



1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:
 5 #EMAIL:y1053419035@qq.com
 6 
 7 import time
 8 
 9 MonitoringFile = "access.log"                       #定义我们需要监控的文件名称。
10 
11 with open(MonitoringFile,'r',encoding="utf-8") as f:
12     f.seek(0,2)                         #表示将光标对应文件的末尾。
13     while True:
14         line = f.readline().strip()                #读取每行的内容,并把换行符脱掉。
15         if line :
16             print("新增了一条记录:",line)           #打印从文件末尾新增的每一行内容
17         time.sleep(0.5)                             #每次打印一行信息都需要睡0.5秒钟。