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 文件的读写的主要内容,如果未能解决你的问题,请参考以下文章

python学习--读写Excel文件

python文件读写-----csv的使用

ROS学习 Python读写文本文件

python学习day9笔记

day1::(python-学习之路)-流程控制和文件读写

学习python第一次应用---编写登录接口(关于whileiffor语句,dict以及文件的读写)