python写文件操作时定位到某个位置所用的函数_Python 文件操作

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']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值