赞
踩
Python 文件操作主要包括打开文件、读文件、写文件、修改文件、关闭文件等操作,还会写一些基本操作方法。
打开文件 - open()
在 python,使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
示例如下:
1f = open('test.txt', 'w')
访问模式
说明
r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。
rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。
r+
打开一个文件用于读写。文件指针将会放在文件的开头。
w+
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
关闭文件 - close()1
2
3
4
5# 新建一个文件,文件名为test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()
写文件 - write()1
2
3
4>>>f = open('text.txt', 'w')
>>>f.write('hello!')
6
>>>f.close()
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
读文件 - read()
使用 read(num) 可以从文件中读取数据,num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num ,那么就表示读取文件中所有的数据。
1
2
3
4
5>>>f = open('text.txt', 'r')
>>>content = f.read()
>>>content
'hello!'
>>>f.close()
读数据 - readlines()
readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
1
2
3
4>>>f = open('text.txt', 'r')
>>>result = f.readlines()
>>>result
['hello!\n', 'world\n', 'haha\n']
读数据 - readline()1
2
3
4
5
6
7>>>f = open('text.txt', 'r')
>>>f.readline()
'hello!\n'
>>>f.readline()
'world\n'
>>>f.readline()
'haha\n'
处理大文件
一般的读取,readlines()、read() 等会将整个文件加载到内存中。在文件较大时,往往会引发 MemoryError(内存溢出)。本人试了用 readlines() 读取一个 2G 大小的日志文件,结果本子直接跑挂。
处理方法一般有以下几种:
逐行读取1
2
3
4
5while True:
line = f.readline()
if not line: # 到 EOF,返回空字符串,则终止循环
break
do_something(line)
使用 with 结构
with 语句句柄负责打开和关闭文件(包括在内部块中引发异常时),for line in f 对可迭代对象 f 进行迭代遍历,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。
这也是较为推荐使用的方法。
1
2
3with open(filename, 'rb') as f:
for line in f:
文件的随机读写
获取当前读写的位置 - tell()
在读写文件的过程中,如果想知道当前的位置,可以使用 tell() 来获取。
1
2
3
4
5
6
7
8
9
10
11
12>>>f = open('/mnt/d/download/catalina.out','r')
>>>str = f.read(3)
>>>str
'Apr'
>>>str = f.read(30)
>>>str
' 25, 2017 10:54:11 AM org.apac'
>>>f.tell()
33
>>>str = f.read(200)
>>>f.tell()
233
定位到某个位置 - seek()
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用 seek()。
seek(offset, from):
offset - 偏移量
from - 方向0 - 表示文件开头
1 - 表示当前位置
2 - 表示文件末尾
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19>>>f = open('/mnt/d/download/catalina.out','r')
>>>f.read(30)
'Apr 25, 2017 10:54:11 AM org.a'
>>>f.tell()
30
# 把位置设置为:从文件开头,偏移6个字节
>>>f.seek(6,0)
6
>>>f.tell()
6
# 把位置设置为:离文件末尾,20个字节处,需要已rb模式打开
>>>f = open('/mnt/d/download/catalina.out','rb')
>>>f.seek(-20,2)
2238539151
>>>f.read(10)
b'ged at DEB'
>>>f.read(10)
b'UG level.\n'
文件重命名 - os.rename('srcFile', 'destFile')
os 模块中的 rename() 可以完成对文件的重命名操作
删除文件 - os.remove('fileName')
文件夹的相关操作创建文件夹 - os.mkdir('dirName')
获取当前目录 - os.getcwd()
改变目录 - os.chdir('../')
获取目录列表 - os.listdir('./')
删除文件夹 - os.rmdir('dirName'),不能删除非空目录
1
2
3
4
5
6
7
8
9
10
11
12>>>os.getcwd()
'/mnt/d/code/Python/itcast'
>>>os.mkdir('test')
>>>os.chdir('test')
>>>os.listdir('.')
[]
>>>os.chdir('../')
>>>os.listdir('./')
['07day_1.py', '07day_2.py', '07day_3.py', '1_1.py', 'func.py', 'test']
>>>os.rmdir('test')
>>>os.listdir('./')
['07day_1.py', '07day_2.py', '07day_3.py', '1_1.py', 'func.py']
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。