python 文件操作

打开文件

  • 基本语法:file = open(‘文件名’,mode)
  • mode: 打开一个文件:r,写入一个文件:w,追加一些信息:a,操作二进制文件:b,又可以加又可以读:+
访问方式说明
r以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常
w以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a以追加方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入
r+以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常
w+以读写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a+以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入
  • 写文件
# 写一个文件
# 创建一个文件后存储在和代码一个文件夹里面
myfile = open('hello world.txt', 'w')
myfile.write('di\n')
myfile.write('helloworld\n')
myfile.close()
  • 读文件

文件名需要注意大小写
文件指针:文件指针 标记 从哪个位置开始读取数据,第一次打开 文件时,通常 文件指针会指向文件的开始位置。当执行了 read 方法后,文件指针 默认情况下会移动到 读取内容的末尾。

# 读取一个文件
f = open('hello world.txt', 'r')
print(f.read())
# r的作用相当于一个指针,读取结束之后再读取就不会有任何操作了
print(f.read())
# 读取第一行
print(f.readline())
# readlines是一个列表,读取所有的行数
l = open('hello world.txt').readlines()
  • 关闭文件
    记得一定要关闭文件,否则就会出现:Python 程序不报错,但是f.write()写不进内容,始终保持空白
    问题博客参考
文件名.close()

读写一个二进制文件

二进制文件不是给人直接阅读的,而实提供给其他软件使用的,不能使用文本编辑软件查看

f = open('data.bin', 'b').read()

pickle的应用

pickle是将一个对象存入一个文件里面
在这里插入图片描述

import pickle

person = {'name': 'di', 'age': 22}
# 将对象序列为字符串
s = pickle.dumps(person)
print(s)
# 从字符串反序列化为对象
p = pickle.loads(s)
print(p)

# 将序列字符串存入文件中
a = pickle.dump(person, open('pickle_db', 'wb'))
open('pickle_db', 'rb').close()
# 从文件中载入对象
b = pickle.load(open('pickle_db', 'rb'))
print(b)
  • pickle存入文件

存储二进制文件允许将具体的数据类型存进去,这里存入一个字典类型,d = {'a': 1, 'b': 2},接着创建一个二进制文件方便写入:f = open('datafile.pkl', 'wb'),导入模块:import pickle,将具体的数据类型写入二进制文件:pickle.dump(d, f),写入文件之后记得关闭:f.close()
接下来尝试将二进制文件打印出来,print(open('datafile.pkl', 'rb').read()),但是这个读取不符合人的习惯,那么如何读取二进制文件里面的具体类型呢?data = pickle.load(open('datafile.pkl', 'rb'))print(data)
:读取二进制文件的时候,后面模式必须加上,否则就会读取错误

shelve的应用

将多个对象存储在一个文件里面,给不同的对象加多个键值

import shelve

scores = [99, 88, 77]
student = {'name': 'Di', 'age': 18}
# 创建一个数据库文件存储我们需要的信息
db = shelve.open('shelve_student')
# 赋值文件,保存键的类型特征
db['s'] = student
db['score'] = scores
print(len(db))
# 直接访问就可以
print(db['s'])
print(db['score'])
# 全局删去变量
del db['score']
print(len(db))
# 关闭数据库
db.close()

with写法:自动关闭文件

# with

with open('course.txt', encoding='utf-8') as f:
    for line in f.readlines():
        print(line)

  1. 打开带有中文的文件,记得要加上encoding='utf-8'
  2. 采用with的格式,系统用完文件之后会自动释放,推荐采用这种方法,不用再写文件名.close()

文件复制

小文件复制

打开一个已有文件,读取完整内容,并写入到另外一个文件

# 1. 打开文件
with open('course.txt', encoding='utf-8') as file_read:
    text = file_read.read()

with open('course_duplicate.txt', 'w', encoding='utf-8') as file_write:
    file_write.write(text)

大文件复制

# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")

# 2. 读取并写入文件
while True:
    # 每次读取一行
    text = file_read.readline()

    # 判断是否读取到内容
    if not text:
        break

    file_write.write(text)

# 3. 关闭文件
file_read.close()
file_write.close()

文件复制部分参考文献

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值