Python—文件操作

一、文件打开和关闭

# 第一种方式/异常退出时文件无法关闭
file = open('test.txt', 'rw')
file.close()
# 第二种方式/使用finally最终执行close()
try:
    file = open('test.txt', 'rw')
except FileNotFoundError:
    print('文件未找到')
finally:
    file.close()
# 第三种方式/使用with....as,当文件执行或者出错时退出,文件最后执行close()
with open('youbian1.txt', 'r', encoding='utf8') as file:
    # 执行的方法
    pass

二、文件的读写

读写各类的各种方式及对应的功能:

  1. 单一方法
    1. r: 以只读方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,则报错。这是默认模式。
    2. w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    3. a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    4. rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
    5. wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    6. ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  2. 读写方法
    1. r+:打开一个文件用于读写。文件指针将会放在文件的开头。
    2. w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    3. a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    4. rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    5. wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    6. ab+:以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
      整体来说有+号的就是读写,有b的是二进制,r是从头,a是从最后,w是覆盖或创建

读:

import json
you_list = []
with open('youbian1.txt', 'r', encoding='utf8') as file:
    while True:
        # content = file.read() 读取一个
        # 读取一行
        content = file.readline().strip(',\n')
        # content = file.readlines().strip(',\n') 按行读取所有
        if not content:
            break
        x = json.loads(content)
        you_list.append(x)
print(you_list)

写:

# 序列化
import json
you_dict = {
	'name':'小李',
	'age':18,
	'like':'跳舞'
}
# encoding:编码方式,
with open('./test.txt(文件地址)','a(写入方式)',encoding='utf-8') as fp:
	# ensure_ascii=False:如果数据中有中文,可以使数据存入文本中后保持中文状态。
	fp.write(json.dumps(you_dict,ensure_ascii=False))

上述代码中的readline方法与readlines有区别,当数据可以直接导入用是,可以直接用readlines读取后使用json的反序列化load、loads将字符串改为对象

三、将文件写入内存

Python中提供了StringIO和BytesIO这两个类将字符串数据和二进制数据写入到内存里。

StringIO

from io import StringIO

# 创建一个StringIO对象
f = StringIO()
# 可以像操作文件一下,将字符串写入到内存中
f.write('hello\r\n')
f.write('good')

# 使用文件的 readline和readlines方法,无法读取到数据
# print(f.readline())
# print(f.readlines())

# 需要调用getvalue()方法才能获取到写入到内存中的数据
print(f.getvalue())

f.close()

BytesIO

from io import BytesIO

f = BytesIO()
f.write('你好\r\n'.encode('utf-8'))
f.write('中国'.encode('utf-8'))

print(f.getvalue())
f.close()

BytesIO使用二进制存入内存

四、文件的拷贝

# 提示输入文件
file_name = input("请输入要拷贝的文件名字:")

# 以读的方式打开文件
old_file = open(file_name, 'rb')

# 分割文件名和后缀名
file_names =file_name.rsplit('.', maxsplit=1)

# 组织新的文件名字
new_file_name = file_names[0] + '.bak.'+file_names[1]

# 创建新文件
newFile = open(new_file_name, 'wb')

# 把旧文件中的数据,一行一行的进行复制到新文件中
for lineContent in old_file.readlines():
    newFile.write(lineContent)

# 关闭文件
old_file.close()
newFile.close()

后续拓展,上面的需要更详细,可以再加个csv文件操作…

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值