文件
文件的打开和关闭
# Python里使用 open 内置函数打开并操作一个文件
# open 参数介绍
# file:用来指定打开的文件(不是文件的名字,而是文件的路径)
# mode:打开文件时的模式,默认是 r 表示只读
# encoding:打开文件时的编码方式
# open 函数会有一个返回值,打开的文件对象
# xxx.txt 写入时,使用的 utf8 编码格式
# 在windows操作系统里,默认使用 gbk 编码格式打开文件
# 解决方案:写入和读取使用相同的编码格式
file = open('xxx.txt', encoding='utf8')
# print(type(file)) # <class '_io.TextIOWrapper'>
print(file.read())
file.close() # 操作完成文件以后,关闭文件
路径的介绍
# open 参数介绍
# file:用来指定打开的文件(不是文件的名字,而是文件的路径)
# mode:打开文件时的模式,默认是 r 表示只读
# encoding:打开文件时的编码方式
import os
# print(os.sep) # windows系统里,文件夹之间使用 \ 分隔
# 在Python字符串里, \ 表示转义字符
# 在非windows系统里,文件夹之间使用 / 分隔
# 路径分为两种:
# 1.绝对路径:从电脑盘符开始的路径
# 路径书写的三种方式:1. \\ 2. r'\' 3. '/' (推荐)
# file = open('D:\\Pycharm文件\\代码练习\\xxx.txt')
# file = open(r'D:\Pycharm文件\代码练习\xxx.txt', encoding='utf8')
# file = open('D:/Pycharm文件/代码练习/xxx.txt', encoding='utf8')
# 2.相对路径:当前文件所在的文件夹开始的路径
# ../ 表示返回到上一级文件夹
# ./ 可以省略不写,表示当前文件夹
# / 不能随便用
file = open('./xxx.txt', encoding='utf8')
# file = open('./demo/sss.txt', encoding='utf8')
# file = open('./../ppp.txt', encoding='utf8')
print(file.read())
file.close()
文件的打开方式
# mode 指的是文件的打开方式
# r:只读模式,默认,打开文件以后,只能读取,不能写入。如果文件不存在,会报错
# w:写入模式,打开文件以后,只能写入,不能读取。如果文件存在,会覆盖文件;如果文件不存在,会创建文件
# b:以二进制的形式打开文件,可以用来操作非文本文件
# t:文本形式打开
# mode默认使用的 rt
# rb:以二进制读取 wb:以二进制写入
# a:追加模式,会在最后追加内容。如果文件不存在,会创建文件;如果文件存在,会追加
# r+:可读写。如果文件不存在,会报错
# w+:可读写。如果文件存在,会覆盖文件;如果文件不存在,会创建文件
# file = open('xxx.txt', 'r')
# print(file.read())
# file.write('hello') # 不能执行写入操作,会报错
# file = open('xs.txt', 'r') # 文件不存在时,会报错
# file = open('xxx.txt', 'w')
# file.read() # 不能够执行读取,会报错
# file.write('hello') # 可以执行写入的操作
# file = open('yyy.txt', 'w') # 创建了文件
# file = open('xxx.txt', 'rb')
# print(file.read()) # 读取的结果是二进制b'\xc4\xe3\xba\xc3'
# file = open('xxx.txt', 'wb')
# file.write('大家好才是真的好') # 报错,只能写入二进制
# file.write('大家好才是真的好'.encode('utf8'))
file = open('yyy.txt', 'w+',)
file.write('哈哈哈')
file.seek(0, 0) # 写入之后,文件指针到最后,需要调用 seek 将文件指针重置到开头
print(file.read())
file.close()
文件的读取方式
# file = open('xxx.txt') # 报错,默认是以rt打开,如果文件不存在,会报错
# file = open('sss.txt', 'rt', encoding='utf8')
# print(file.read()) # 将所有的数据都读取出来
# print(file.readline()) # 只读取一行数据
# while True:
# content = file.readline()
# print(content)
# if content == '':
# break
# x = file.readlines() # 读取所有行的数据,保存到一个列表里
# print(x)
# x = file.read(10) # 指的是读取的长度
# print(x)
file = open('../02-视频/02-作业讲解2.mp4', 'rb')
# print(file.read())
while True:
content = file.read(1024)
if not content:
break
print(content)
file.close()
文件拷贝功能
import os
file_name = input('请输入一个文件路径:')
if os.path.isfile(file_name):
# 打开旧文件
old_file = open(file_name, encoding='utf8')
# names = file_name.rpartition('.') # ('sss', '.', 'txt')
# new_file_name = names[0] + '.bak.' + names[2]
names = os.path.splitext(file_name) # ('sss', 'txt')
new_file_name = names[0] + '.bak' + names[1]
new_file = open(new_file_name, 'w', encoding='utf8') # 打开一个新文件用于写入
# 把旧文件的数据读取出来写入到新的文件
new_file.write(old_file.read())
new_file.close()
old_file.close()
else:
print('您输入的文件不存在')
文件拷贝优化
import os
file_name = input('请输入一个文件路径:')
if os.path.isfile(file_name):
old_file = open(file_name, 'rb') # 以二进制的形式读取文件
names = os.path.splitext(file_name)
new_file_name = names[0] + '.bak' + names[1]
new_file = open(new_file_name, 'wb') # 以二进制的形式写入文件
while True:
content = old_file.read(1024) # 读取出来的内容是二进制
new_file.write(content)
if not content:
break
new_file.close()
old_file.close()
else:
print('您输入的文件不存在')
CSV文件的读取
CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分隔值,其文件以纯文本的形式存储表格数据。可以把它理解为一个表格,只不过这个表格是以纯文本的形式显示的,单元格与单元格之间,默认使用逗号进行分隔;每行数据之间,使用换行进行分隔。