Python学习12 文件的读写
Posted DQ_CODING
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习12 文件的读写相关的知识,希望对你有一定的参考价值。
目标
文件的打开和关闭
mode缺省情况下表示只读r
文件的路径
前面加个r’,代表其中的转义字符不起作用
文件的打开方式
案例:实现文件拷贝的功能
将某一文件夹下的某一文件 保存在当前文件 所在目录。
import os
#读取文件1
path='./file.txt'
file=open(path,'r',encoding='utf-8')
words=file.read()
file.close()
#写入文件2
path2='./file2.txt'
print(os.listdir('./'))
file2=open(path2,'x',encoding='utf-8')
file2.write(words)
file2.close()
#读取文件2
file2=open(path2,'r',encoding='utf-8')
print(file2.read())
file2.close()
文件路径分割+os模块
1.字符串
2.os模块
案例:多个文件递归复制
文件复制:
设你的文件夹p1下包含多个文件,p2为空文件夹,编写函数使其能将p1下的文件复制到p2中
写法1:
# path1 = '../lesson12'
# path2 = './path2'
path1=input('请输入要拷贝的文件路径')
path2=input('请输入空的文件路径')
# 请输入要拷贝的文件路径D:\\\\School\\\\Undergraduate\\\\考研学习\\\\C语言
# 请输入空的文件路径C:\\\\Users\\\\DQ\\Desktop\\\\test
import os
def createFile(path1, path2):
#注意:在这里不要指明编码格式,因为有些文件过于复杂,可能字符集不能表示完
#rb:以二进制的形式读取
file1 = open(path1, 'rb')
words = file1.read()
#wb以二进制的形式写入文件,w:如果文件不存在会创建文件,如果文件存在就覆盖文件
file2 = open(path2, 'wb')
file2.write(words)
file1.close()
file2.close()
def copyFunction(path1, path2):
oldPath = os.listdir(path1)
for i in oldPath:
oldPath = path1 + '/' + i
newPath = path2 + '/' + i
if os.path.isfile(oldPath):
# 如果文件不存在才创建文件
if not os.path.exists(newPath):
createFile(oldPath, newPath)
elif os.path.isdir(oldPath):
# 如果是文件夹不存在才创建
if not os.path.exists(newPath):
# 创建文件夹
os.mkdir(newPath)
# 不管是否需要创建文件夹,都要递归新的文件夹路径
copyFunction(oldPath, newPath)
copyFunction(path1, path2)
写法2:
import os
def copyFile(srcFile,destFile):
fileInput=open(srcFile,mode='rb+')
fileOutput=open(destFile,mode='wb+')
fileOutput.write(fileInput.read())
fileOutput.close()
fileInput.close()
def copyDir(srcDir,destDir):
for s in os.listdir(srcDir):
newPath = os.path.join(srcDir, s)
destPath = os.path.join(destDir, s)
if os.path.isdir(newPath):
os.mkdir(destPath)
copyDir(newPath,destPath)
elif os.path.isfile(newPath):
copyFile(newPath,destPath)
srcDir=input("请输入需要复制的文件夹:")
destDir=input("请输入目标空文件夹:")
copyDir(srcDir,destDir)
案例:递归删除多个文件
遍历删除含有多个文件的文件夹
# author:dq
# project:PythonProject
# date:2021年10月28日
# function:遍历删除含有多个文件的文件夹。
import os
path = 'D:/CodeProject/Python_DQ/PythonProject/pythonProject/lesson13/path2'
#path=input('请输入文件路径')
def delete(path):
# 判断文件是否存在
if os.path.exists(path):
# 如果是文件,就直接删除
if os.path.isfile(path):
os.remove(path)
# 如果是文件夹
elif os.path.isdir(path):
# 如果文件夹为空就就直接删除
if not os.listdir(path):
os.rmdir(path)
# 如果文件夹不为空,就进入新的文件夹递归
else:
for i in os.listdir(path):
#拼接获取新的文件路径
newPath=os.path.join(path,i)
delete(newPath)
#再逐一删除外层的文件夹
os.rmdir(path)
delete(path)
CSV文件
关系型数据库:表格,二维数据
CSV文件读取与写入(学习)
newline=‘’识别换行符,空字符串
使用代码:
#author:dq
#project:PythonProject
#date:2021年11月01日
#function:csv文件的读写
#读取csv
import csv
path='./information.csv'
file=open(path,'w',encoding='utf-8',newline='')
w=csv.writer(file)
w.writerow(['name','age','gender'])
w.writerow(['dq',20,'female'])
w.writerow(['dd',20,'man'])
w.writerow(['rwq',20,'female'])
file.close()
#写入CSV
file=open(path,'r',encoding='utf-8',newline='')
r=csv.reader(file)
for data in r:
print(data)
将数据写入内存(了解即可)
把print输出的内容输出到到文件流(内存)
print是输出之后进行换行
file是一个文件对象
序列化和反序列化
序列化与反序列化:json
json序列化与反序列化的方法
案例代码:
#author:dq
#project:PythonProject
#date:2021年11月01日
#function:序列化与反序列化:json
#写入
import json
#dumps
path='./name.txt'
file=open(path,'w',encoding='utf-8')#写入内容,有会被覆盖
names=['dq','dd','java']
content=json.dumps(names)
file.write(content)
file.close()
#dump
file=open(path,'w',encoding='utf-8')#追加a+
names=['dq','java','java']
content=json.dump(names,file)
file.close()
#读取
#load
file=open(path,'r',encoding='utf-8')
read=json.load(file)
file.close()
print(read,type(read))#['dq', 'java', 'java'] <class 'list'>
#loads
content='{"name":"dq","age":"18"}'
p=json.loads(content)
print(p,type(p))#{'name': 'dq', 'age': '18'} <class 'dict'>
序列化与反序列化:pickle
代码:
#author:dq
#project:PythonProject
#date:2021年11月01日
#function:pickle序列化与反序列化
import pickle
#序列化
#dumps
names=['dq','java','android']
byteContent=pickle.dumps(names)
print(byteContent)
#写入文件
path='./pickle.txt'
file=open(path,'wb')
file.write(byteContent)
file.close()
#读取文件
file_r=open(path,'rb')
#readContent=file_r.read()
readContent=pickle.load(file_r)
print(readContent)
file_r.close()
代码:
#author:dq
#project:PythonProject
#date:2021年11月01日
#function:pickle序列化与反序列化
import pickle
#序列化
#dumps
names=['dq','java','Android']
byteContent=pickle.dumps(names)
print(byteContent)
#写入文件
path='./pickle.txt'
file=open(path,'wb')
file.write(byteContent)
file.close()
#读取文件
file_r=open(path,'rb')
#readContent=file_r.read()
readContent=pickle.load(file_r)
print(readContent)
file_r.close()
json和pickle的区别
自动关闭文件:with关键字
标准输出和输入(了解)
以上是关于Python学习12 文件的读写的主要内容,如果未能解决你的问题,请参考以下文章