Python入门之文件操作
python文件操作
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
下面将介绍下在python下文件常见的读写操作:
1、文件读写操作:
f = open("文件","模式"[,“编码”]) #打开文件
f.read()等操作方法 #操作文件
f.close() #关闭文件
上面操作文件的方法比较繁琐,会经常忘记关闭文件;所以可以通过with语句来自动帮我们调用close()方法:
with open('文件','模式'[,'编码']) as f:
f.read()等操作方法
2、文件操作模式:
常规模式:
-
- r :只读模式;以读方式打开文件,只可读取文件信息,不能写入。
- w:只写模式;不可读,文件不存在则创建;如文件存在,则清空该文件,再写入新内容。
- a:追加模式;可读写,文件不存在则创建;如文件存在则在文件末尾追加新内容。
'+'模式,表示可以同时读写某个文件:
-
- r+:可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖相同字节数的内容,如果先读后写,则会在文件最后追加内容;或先写后读也会在文件最后追加内容。
View Code#先写后读文件 #!/usr/bin/env python3 import os with open("/tmp/file.txt","r+") as f: f.write("hello world!!\n") for i in f.readlines(): print(i.strip()) 执行结果: [root@localhost tmp]# ./pytest20.py hello world!! [root@localhost tmp]# ./pytest20.py hello world!! hello world!! #先读后写文件 #!/usr/bin/env python3 import os with open("/tmp/file.txt","r+") as f: f.readline() f.write("hello world!!\n") os.system("cat /tmp/file.txt") 执行结果: [root@localhost tmp]# ./pytest20.py hello world!! [root@localhost tmp]# ./pytest20.py hello world!! hello world!! [root@localhost tmp]# ./pytest20.py hello world!! hello world!! hello world!! #直写文件 #!/usr/bin/env python3 import os print("文件原始内容:") os.system("cat /tmp/file.txt") print("\r") with open("/tmp/file.txt","r+") as f: f.write("hello world!!\n") print("文件修改后内容:") os.system("cat /tmp/file.txt") 执行结果: 文件原始内容: what fuck!!! Are you OK? 文件修改后内容: hello world!! re you OK?
-
w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建
- a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
- r+:可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖相同字节数的内容,如果先读后写,则会在文件最后追加内容;或先写后读也会在文件最后追加内容。
U模式:
-
- 'U':表示在读取时,可以将\r\n自动转换为\n(与r或r+模式使用)
b模式:
-
- 'b':表示处理二进制文件(linux可忽略,windows处理二进制文件时需标注)
3、文件对象的操作方法:
- f.read():读取文件所有内容;也可以读取指定多少个字符:f.read(num),num为指针
View Code#读取文件所有内容 #!/usr/bin/env python3 import os with open("/tmp/file.txt","r+") as f: print(f.read().strip()) 执行结果: [root@localhost tmp]# cat file.txt hello world!! re you OK? [root@localhost tmp]# ./pytest20.py hello world!! re you OK? #读取指定指针的字符 #!/usr/bin/env python3 import os with open("/tmp/file.txt","r+") as f: print(f.read(5)) #指针指向5,所以只读取5个字符 执行结果: [root@localhost tmp]# cat file.txt hello world!! re you OK? [root@localhost tmp]# ./pytest20.py hello
- f.readline():读取一行内容
#!/usr/bin/env python3 with open("/tmp/file.txt","r") as f: print(f.readline().strip()) 执行结果: [root@localhost tmp]# cat file.txt hello world!! re you OK? [root@localhost tmp]# ./pytest20.py hello world!!
- f.seel():指定文件中指针位置,读取文件时,指针前的内容将不会被显示
#!/usr/bin/env python3 with open("/tmp/file.txt","r") as f: f.seek(5) print(f.readline().strip()) 执行结果: [root@localhost tmp]# cat file.txt hello world!! re you OK? [root@localhost tmp]# ./pytest20.py world!!
- f.tell():获取指针位置
#!/usr/bin/env python3 with open("/tmp/file.txt","r") as f: print(f.tell()) print(f.readline().strip()) print(f.tell()) 执行结果: [root@localhost tmp]# cat file.txt hello world!! re you OK? [root@localhost tmp]# ./pytest20.py 0 hello world!! 1
-
f.truncate():截取指定大小的文件内容,仅保留指定之前数据(会写入源文件)
#!/usr/bin/env python3 with open("/tmp/test_file","r") as f: f.truncate(1024) #截取1024字节即1K数据 执行结果: [root@localhost tmp]# ls -lh test_file -rw-r--r--. 1 root root 1.7K Jun 26 18:57 test_file [root@localhost tmp]# ./pytest20.py [root@localhost tmp]# ls -lh test_file -rw-r--r--. 1 root root 1.0K Jun 26 18:58 test_file
- f.readable():判读文件是否可读
#!/usr/bin/env python3 with open("/tmp/test_file","r") as f: print(f.readable()) with open("/tmp/test_file","w") as f: print(f.readable()) 执行结果: True #返回True表示可读 False #返回False表示不可读
- f.writeable():判读文件是否可写,同f.readable()判读方式差不多,这里不多介绍
- f.write(str):将字符串str写入文件
#!/usr/bin/env python3 with open("/tmp/test_file","w") as f: f.write("hello linux!\nhello python!")


浙公网安备 33010602011771号