python 文件操作不被打断_我只不过是个python王者-前篇003之文件操作

前篇的意思就是说......我还没有成为python王者(想写大神竟然通不过),只是刚刚入了个门。总是在羡慕人家玩爬虫啊,办公自动化啊,还用python玩玩股票啊,看起来都牛逼哄哄。我也不愿再做小菜鸟了,我也要发家致富!第一步就是把我每天学到的东西记录下来,加深点印象。有没有骚年跟我一起冲!!!好了好了,我先冲。(如果小白看到了,对我所写的务必持怀疑态度;如果大神偶尔瞄到了,我写错了麻烦纠正下哈!)

文件操作

1. 基本步骤

用几句简单的代码描述下步骤:# 1. 创建文件对象,打开

f = open('test.txt', 'w')

# 2. 写入内容

f.write('test')

# 3. 关闭文件对象

f.close()注意:文件对象需要关闭,否则会一直占用内存。

2. 访问模式模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+打开一个文件用于读写。文件指针将会放在文件的开头。

rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

这里介绍几个主访问模式:r 只读,不支持写入,如果文件不存在会报错;

w 只写,文件不存在会新建文件;写入内容会覆盖原来内容;

a 追加,文件不存在会新建文件;写入内容追加至原来内容后;

如果没有访问模式,默认为‘r’。r+,w+,a+的区别:

三种模式都是可读可写,而r+遵从r的属性,如果文件不存在就会报错;r+和w+的文件指针在文件的开头,而a+的文件指针在文件的结尾,因此使用a+是无法通过.read()直接读取的;而使用w+会使用新内容去覆盖,使用.read()也是无法直接读取的。

3. 文件对象方法

3.1 读3.1.1 read()

对象.read(num)

num表示从文件中读取数据的字节长度,没有num就是读取全部;可以使用print()打印输出。3.2 readlines()

按照行的方式一次性读取整个内容,并返回一个列表(记得换行符噢);3.3 readline()

一次读取一行内容;f = open('test.txt')

content = f.readline()

print(f'第一行:{content}')

content = f.readline()

print(f'第二行:{content}')

f.close()3.4 seek()

作用:移动文件指针(就可以解决上面说的“无法直接读取数据”啦!)

文件对象.seek(偏移量, 起始位置)

起始位置:0:文件开头

1:当前位置

2:文件结尾f = open('test.txt', 'w+')

f.write('aaa')

f.seek(0)

print(f.read())

f.close()如果不使用seek的话,在重新覆盖了test.txt之后,写入内容也是无法直接读取的,因为此时指针在‘aaa’的后面,而seek(0),即seek(0,0),移动了指针的位置到开头,那么此时就可以通过read()读取啦!

4. 文件备份算是一个知识应用吧

先复习一个字符串里的函数,用于寻找最后一次出现查找字符串的位置:

string.rfind(str, beg=0,end=len(string))str: 查找的字符串

beg: 开始查找的位置,默认为0

end: 结束查找位置,默认为str的长度old_name = input("输入备份文件名:")

# 找到最后一次出现该字符串的位置并返回

index = old_name.rfind('.')

if index > 0: # 这里是防止文件名的不规则性

# 记录后缀名

postfix = old_name[index:]

# 创建备份文件名

new_name = old_name[:index]+'_bak'+postfix

# 只读打开源文件,只写打开备份文件(新建)

old_f = open(old_name, 'rb') # 用二进制读写

new_f = open(new_name, 'wb')

# 写入

content = old_f.read()

new_f.write(content)

# 关闭文件

old_f.close()

new_f.close()在课程中,写入的时候老师使用了old_f.read(1024)并进行while True的循环,直到内容为空才break退出循环,原因是不是.read()有可能会读取不到所有数据?

5. os模块

import os文件重命名

os.rename()删除文件

os.remove()创建文件夹

os.mkdir()删除文件夹

os.rmdir()获取当前目录

os.getcwd()改变默认目录

os.chdir()获取目录列表

os.listdir()

那么,来个应用案例巩固一下,批量重命名当前目录下的文件:import os

# 获取当前目录

curr_dir = os.getcwd()

print(curr_dir)

# 将当前目录下的所有文件重命名为secret_...

for file in os.listdir(curr_dir):

os.rename(file, 'secret_'+file)

6. 个人补充

课程里没有with open(...) as f:的用法,还好之前学到过,这样的写法最大区别就是不用关闭文件了,程序会自动关闭。写法差不多,当然写法还是越简便越好!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值