文件操作:打开/关闭、读/写/添加、改变部分内容、复制文件/删除文件/重命名文件
常用可操作的文件类型:.txt,.xlsx,.csv,<文件.docx、.xml、.html未记录>
操作txt文件
打开文件open()
语法open(file, mode=‘r’, buffering=-1, encoding=None, errors=None,newline=None, closefd=True, opener=None)
其中,
file:包含完整路径的文件名
mode:文件打开方式
>>常用模式<<
‘r’—以只读方式打开文件,默认
‘rb’—以二进制格式打开一个文件,用于只读
‘w’--打开一个文件,用于写入
‘wb’—以二进制格式打开一个文件,用于写入
‘a’—打开一个文件,用于追加
‘ab’—以二进制格式打开一个文件,用于追加
>>不常用模式<<
‘r+’/’w+’/’a+’—打开一个文件用于读写
‘rb+’/’wb+’—以二进制格式打开一个文件,用于读写
‘ab+’—以二进制格式打开一个文件,用于追加
>>说明<<
读
若文件不存在,抛出FileNotFoundError异常
不清空内容,可以同时读和写入内容
文件打开时文件指针在文件开头
写
若文件不存在,创建新的文件
先清空文件,指针在文件开头
追加
若文件存在,文件指针放在文件结尾;若不存在,则创建
文件打开状态下使用追加模式,文件指针直接从最后写入
encoding:编码方式,默认方式依赖平台。若要设置,可参考codecs模块
默认为GBK,操作txt文本
newline:换行控制
参数有:None,‘\n’,‘\r’,‘\r\n’
默认None,写入所有参数均转换为’\n’
读文件
使用读文件操作前,需要调用open打开文件
read([size]) 读文件的所有内容
readline([size]) 读文件的一行
readlines ([size] ) 读文件的全部行
举例:
fp = 'D:\\python\\book_project\\file\\t.txt'
with open(fp, 'r') as f1:
print(f1.read())
with open(fp, 'r') as f2:
print(f2.readline())
with open(fp, 'r') as f3:
print(f3.readlines())
运行结果:
fefoewqfqtbbvfe
文字
飞飞飞
fefoewqfqtbbvfe
['fefoewqfqtbbvfe\n', '文字\n', '飞飞飞']
写文件
write(str) 将字符串写入文件中
默认不加换行符,若换行需手动加
举例:
fp = 'D:\\python\\book_project\\file\\t.txt'
with open(fp, 'w') asf:
f.write('Hi,little girl'+'\n'+'Hi')
with open(fp, 'r') asf:
print(f.read())
运行结果
Hi,little girl
Hi
writelines(seq) 将序列写入文件中
将seq的内容全部写到文件中,且seq的内容必须全部为字符串类型
fp = 'D:\\python\\book_project\\file\\t.txt'
with open(fp, 'w') asf:
seq = '''Hi,little girl
Hi'''
f.writelines(seq)
with open(fp, 'r') asf:
print(f.read())
运行结果
Hi,little girl
Hi
修改txt文件内容
方法一:字符串替换line.replace(before,after)
方法二:正则表达式re.sub方法替换
fp.tell() 返回文件操作标记当前的位置
fp.seek(offset[,from]) 文件定位
truncate([size]) 裁剪文件
文本模式为.csv
需要导入库import csv
reader=csv.reader(f, delimiter=',')
用来读取数据,reader为生成器,每次读取一行,每行数据为列表格式,可以通过delimiter参数指定分隔符
writer=csv.writer(f)
用来写入数据,按行写入,writer支持writerow(列表)单行写入,和writerows(嵌套列表)批量写入多行,无须手动保存。
标题行
当文件中有标题行时,可以使用header=next(reader)先获取到第一行的数据,再进行遍历所有的数据行。
写入时,可以先使用writer.writerow(标题行列表),写入标题行,再使用writer.writerows(多行数据嵌套列表),写入多行数据(也可以逐行写入)。
举例
importcsv
# ===========读文件===========
with open('t.csv', 'r') as csvfile: # 打开当前目录下的t.csv文件
# print(csv.reader(csvfile)) #得到是一个地址
for row in csv.reader(csvfile): # 分行打印
print(row)
# ===========写文件===========
with open('t.csv', 'w') ascsvfile:
temp = csv.writer(csvfile) # 定义一个写变量
temp.writerow(['index', 'yanghui', '19']) # 写入单行,多行使用writerows
with open('t.csv', 'r') as csvfile: # 读取修改后的内容
for row incsv.reader(csvfile):
print(row)
说明:
写入csv文件——若文件不存在,则新建;写入的内容完全覆盖原内容;可单行或者多行写入;进行内容写入操作前,需要定义一个写变量
读csv文件——csv.reader(file)得到的是一个地址,打印内容可使用for循环访问
文本模式为.xlsx
以xlrd/xlwt为例,如下:<仅涉及读和写>
import xlwt # 只能写不能读
import xlrd # 只能读不能写
# =======新建、写入xls文件=====
data = [['姓名', '年龄', '性别', '分数'],
['mary', 20, '女', 89.9],
['mary', 20, '女', 89.9],
['mary', 20, '女', 89.9],
['mary', 20, '女', 89.9]
]
workbook = xlwt.Workbook() # 新建excel文件
sheet = workbook.add_sheet('test') # 新建sheet页
row = 0 # 行
for i indata:
col = 0 # 列
for j ini:
sheet.write(row, col, j) # 在对应的行列中写入内容
col += 1
row += 1
workbook.save('t1.xls') # 保存到当前目录
# =======读xls文件=====
books = xlrd.open_workbook('t1.xls')
sheet = books.sheet_by_index(0) # 指定行和列获取数据
for i in sheet.get_rows(): # 打印所有行数据
print(i)
print(sheet.row_values(0)) # 打印第一行信息
print(sheet.col_values(1)) # 打印第二列信息
文件对象
file.closed 文件关闭,返回True;反之,返回False
file.mode 返回打开文件的访问模式
file.name 返回文件名称
文件上下管理
with…as…
所有程序执行完后会自动关闭。用于关闭文件、释放缓存、断开数据库链接等。且能优化代码
在文件操作中使用,文件会自动关闭,不需要增加f.close()
举例:
fp = 'D:\\python\\book_project\\file\\t.txt'
with open(fp, 'rb') as f:
print(f.read())
复制文件
shutil.copyfile(file1,file2) 将file1文件内容复制到file2中,需要导入import shutil
复制操作前,需要将两文件关闭
举例
importshutil
fp_txt = 'D:\\python\\book_project\\file\\t.txt'
fp_py = 'D:\\python\\book_project\\file\\f-2.py'
shutil.copyfile(fp_txt, fp_py)
<可以进行相同文件类型复制,也可以进行不同文件类型复制。但有时,不同文件类型间复制后,可能会因格式不同而出现文件损坏或者乱码的情况>
删除文件
使用os.remove(file)删除文件
使用os.path.exist(file)来判断文件删除情况
<需导入import os,且file为带绝对路径的文件名>
文件重命名
使用os.rename(name_b,name_f)
其中,name_b为原文件名,name_f为修改后的名字