【python3】4.文件管理

news2025/1/18 9:56:12
2022.11.16 本学习内容总结于莫烦python:4.文件管理
https://mofanpy.com/tutorials/python-basic/interactive-python/read-write-file

4 文件管理

4.1 读写文件

均是用特殊字符open

4.1.1 创建文件

f = open("new_file.txt", "w")   # 创建并打开
f.write("some text...")         # 在文件里写东西
f.close()                       # 关闭

w是写权限,会有相应的读等等(后面讲)…

  • 创建的位置:保存在你脚本的当前目录下
|- me.py
|- new_file.txt
  • 写入内容
with open("new_file2.txt", "w") as f:
    f.writelines(["some text for file2...\n", "2nd line\n"])

4.1.2 读文件

w 改成 r。 也就是说,其实 w 代表的是 writer 代表的是 read

f = open("new_file2.txt", "r")
print(f.read())
f.close()
some text for file2...
2nd line
  • 如果是列表,我们读出来还想是列表,记录列表当中的一个值,可以用 writelines(),那么在读文件的时候, 也可以 readlines() 直接读出来一个列表
with open("new_file2.txt", "r") as f:
    print(f.readlines())
['some text for file2...\n', '2nd line\n']

输出是个列表【】

  • 大数据下,一行一行读取,取代一次性读取
with open("new_file2.txt", "r") as f:
    while True:
        line = f.readline()
        print(line)
        if not line:
            break

知识点

  • open() 函数打开的文件,在操作完成之后,一定要调用 close() 函数将其关闭吗?答案是肯定的。文件在打开并操作完成之后,就应该及时关闭,否则程序的运行可能出现问题。
  • 使用with open(),不需要写close语句,默认自动帮我们关闭文件

参考:
http://c.biancheng.net/view/4770.html
https://www.cnblogs.com/annatest/p/13092135.html


4.1.3 文件编码,中文乱码

原文件的编码,通常来说是 utf-8、gbk、gb2312其中的某一种。

文件在 Windows 存储的时候,是以 gbk 的格式存储的

with open("chinese.txt", "wb") as f:
    f.write("这是中文的,this is Chinese".encode("gbk"))
  • wb,意思是 write binary (二进制写)形式,取代默认的 text 形式

  • 读的时候 要制定编码,不然打不开或乱码

with open("chinese.txt", "rb", ) as f:
    #print(f.read())  # 乱码
    print(f.read().decode('gbk'))  # windows在本机尝试,可以试试这个
# 下面的代码会报错
with open("chinese.txt", "r") as f:
    print(f.read())
#可以
with open("chinese.txt", "r", encoding="gbk") as f:
    print(f.read())
这是中文的,this is Chinese

4.1.4 更多读写模式

在这里插入图片描述

with open("new_file.txt", "r") as f:
    print(f.read())
with open("new_file.txt", "r+") as f:
    f.write("text has been replaced")
    f.seek(0)       # 将开始读的位置从写入的最后位置调到开头
    print(f.read())
some text...
text has been replaced
  • 这里一定要有.seek(0),不然光标在文档末尾,第六行的print(f.read())没有输出
  • 如果没有print(f.read())
    • 第一遍输出:some text… 是因为只有第二行的有输出:print(f.read()),但其实内容输出后已经更改
    • 第二遍运行,会输出第二行语句的输出:text has been replaced;

4.2 文件目录管理

4.2.1 OS库

os库是Python自带的一个非常有用的模块。如果你做一个系统性的东西,要处理文件输出,读入等问题, 那么你有80%概率会使用到os库中的一些功能。

  • ① 文件目录操作os.getcwd()、 os.listdir()
import os 

print("当前目录:", os.getcwd())
print("当前目录里有什么:", os.listdir())
当前目录: /home/pyodide
当前目录里有什么: ['files']
  • ② 创建文件夹os.makedirs
os.makedirs("project", exist_ok=True)
print(os.path.exists("project"))# 这句话是用来检测是否存在的,创建只是上面那句

4.2.2 文件管理系统

  • 删除shutil.rmtree()

用户注册了我这个系统,我得为这个用户创建一个他的文件夹。如果用户注销了,我是不是得把它的文件夹删掉?文件夹里有文件,不为空,就会报错的: 因为文件写了Nothing

os.makedirs("user/mofan", exist_ok=True)
with open("user/mofan/a.txt", "w") as f:
    f.write("nothing")
os.removedirs("user/mofan")  # 这里会报错

这种事情,需要用到另一个库,名字叫做 shutil.rmtree() ,它可以清空整个目录(递归地删除文件)

import shutil

shutil.rmtree("user/mofan")
print(os.listdir("user"))
[]

shutil.rmtree() #递归地删除文件

  • 改名os.rename()
os.makedirs("user/mofan", exist_ok=True)
os.rename("user/mofan", "user/mofanpy")
print(os.listdir("user"))
['mofanpy']

4.2.3 文件目录多种检验

  • 创建文件a.txt,并写上内容nothing
import os
os.makedirs("user/mofan", exist_ok=True)
with open("user/mofan/a.txt", "w") as f:
    f.write("nothing")
  • 进行不同的判断
    判断是否是文件夹 是否是文件
print(os.path.isfile("user/mofan/a.txt")) # True
print(os.path.exists("user/mofan/a.txt")) # True
print(os.path.isdir("user/mofan/a.txt")) # False
print(os.path.isdir("user/mofan"))  # True
  • 创建文件副本

① 先拿到文件名 os.path.basename
② 再拿文件夹名 os.path.dirname
③ 为副本重命名
④ 把目录重新组合 os.path.join

import os
import shutil

def copy(path):
    filename = os.path.basename(path)   # 文件名
    dir_name = os.path.dirname(path)    # 文件夹名
    new_filename = "new_" + filename    # 新文件名
    new_path = os.path.join(dir_name, new_filename) # 目录重组
    shutil.copy2(path, new_path)   # 复制文件
    return os.path.isfile(new_path), new_path

copied, new_path = copy("user/mofan/a.txt")
if copied:
    print("copied to:", new_path)
else:
    print("copy failed")

os.path.join():目录拼接:https://blog.csdn.net/swan777/article/details/89040802

>>> import os
>>> print(os.path.join('path','abc','yyy'))
path\abc\yyy

shutil.copy2(): Python中的方法用于将源文件的内容复制到目标文件或目录。此方法与shutil.copy()方法,但它还会尝试保留文件的元数据。

  • 代替拿文件名和文件夹名
def copy(path):
    dir_name, filename = os.path.split(path)
    new_filename = "new2_" + filename    # 新文件名
    new_path = os.path.join(dir_name, new_filename) # 目录重组
    shutil.copy2(path, new_path)   # 复制文件
    return os.path.isfile(new_path), new_path
copied, new_path = copy("user/mofan/a.txt")
if copied:
    print("copied to:", new_path)
else:
    print("copy failed")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进入数字化供应链高潮期,与IBM咨询共创无边界竞争力

供应链领域的国际专家马丁克里斯托弗在30年前就提出“未来的竞争不再是企业和企业之间的竞争,而是供应链之间的竞争。”近几年来,基于工业4.0技术的供应链4.0开始进入业界的视野,2020年开始的疫情让全球供应链结束了长期稳定状态而进入VUCA&a…

针对谷氨酰胺运输体的小分子抑制剂

精准癌症治疗手段 在运输体水平靶向谷氨酰胺代谢 ACST2 蛋白是谷氨酰胺进入癌细胞的主要转运蛋白。在肺癌、乳腺癌、结肠癌等癌症中,ACST2 蛋白水平的上调与患者存活率有关。当抑制 ACST2 基因表达时,会显著抑制癌细胞生长。ASCT2 水平升高与多种癌症的…

【支付】支付安全

这里写目录标题1. 加密 - 对称加密与非对称加密1.1 对称加密1.2 非对称加密1.3 对称加密与非对称加密区别2. 身份认证公钥加密,私钥解密(加密信息)私钥加密,公钥解密(身份认证)3. 摘要算法与数据完整性3.1 …

深度剖析 Vue3 在浏览器的运行原理

上一讲我们学习了 Vue 响应式的大致原理,响应式就是可以把普通的 JavaScript 对象包裹成响应式对象,这样,我们对对象做的修改,响应式都能够监听到,并且执行 effect 内部注册的函数来执行数据修改之后的效果 那今天我就…

公司建网站多少钱?【网站多少钱】

很多公司成立初期会选择建一个公司网站,那么首先就会考虑公司建网站多少钱的问题。公司建网站多少钱会受到建网站方式的影响,不同方式费用不同,那么下面就说说公司建网站多少钱。 1、公司有团队,自己建 公司有技术团队的情况&am…

【FLASH存储器系列九】ONFI数据接口详述之二

目录 1.1 总线状态 1.2 ZQ校准 1.3 CE_n引脚缩减机制 1.4 差分信号 1.5 Warm up周期 1.6 从SDR到NV-LPDDR4的技术发展总结 1.1 总线状态 SDR 的总线状态: NV-DDR总线状态:值为11b的ALE/CLE 用于数据传输。总线状态在CLK的上升沿开始,持续…

最高效“双11”背后:圆通更不一样了

每年的“双11”都是一场看不见硝烟的战争,有人守着直播间抢货,也有人守着电脑追发货。 河南商丘大学城附近的某电商老板陈泽宇就是后者中的一员。每年“双11”他都高度紧张,提前许多天就开始备货,每天既要紧盯前台销量数字&#…

Leetcode 学习记录 数组与字符串

基础不牢,地动山摇。这句话就是描述我现在的阶段,虽然这些天在csdn的练习上进展还比较顺利,但是内心还是没有底的。实话说,csdn的练习题和leetcode上的比起来,还是真的相差很远。可能是不和口味吧。我还是比较喜欢Leet…

厉害了我们的“中国制造”,新能源“智造”强大到你想象不到

“中国制造”是近日的一大“热词”。 “中国制造”的新能源汽车花式“出海”,产销量连续7年位居全球首位;“中国制造”的过冬八件套反向海淘,订单暴增;“中国制造”的高铁首次全产业链“出海”…… 显而易见,当前是中国…

Unity导表工具Luban插件的数据加载原理与优化

文章目录1. 配置Luban并测试2. Luban 数据加载原理3. 根据工程进行懒加载优化3.1 增加公共接口与接口实现方法3.2 外部提供获取数据的方法3.3 对Luban中的导表模板进行修改4. 优化后测试如果初入坑,Luban配置可以参考宝鱼大佬的视频教程 强力配置工具luban使用教程【…

消除卡顿 mac MATLAB2022b m1/m2原生下载安装 教程

目录 1、版本说明 2、下载链接 2.1、百度网盘链接 2.2、官网下载链接 3、安装 1、版本说明 之前苦于安装matlab 2022b的Intel Rosetta转译版本,真的是明显感受到了卡顿,今天终于等到了2022b的原生版本,安装后占用10.09G内存。 ​​​​…

0096 克鲁斯卡尔算法,迪杰斯特拉算法

/* * 克鲁斯卡尔算法 * 1.用来求加权连通图的最小生成树的算法 * 2.思想:按照权值从小到大的顺序,选择n-1条边,并保证这n-1条边不构成回路 * 3.先构造一个只含n个顶点的森林,依权值从小到大从连通网中选择边加入到森林中 * …

web自动化测试-webdriver实现

webdriver实现基本语法1.Select下拉列表1.1下拉列表单选1.2下拉列表多选2.非Select下拉列表3.文件上传1.1input单个文件上传1.2input多个文件上传1.3非input文件上传1.Select下拉列表 1.1下拉列表单选 from selenium import webdriver from selenium.webdriver.support.ui imp…

GPU驱动及CUDA安装流程介绍

安装前准备工作 确认GPU型号和操作系统版本   准备gpu驱动和CUDA软件包   在nvidia官网进行驱动包下载   GPU驱动下载链接    Linux系统均选择 Linux 64-bit、CUDA Toolkit选择最新版本   注意该版本一定要大于等于cuda软件的版本。   选择CUDA及GPU驱动版本&#…

m基于matlab的TDSCDMA系统性能仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 TD-SCDMA的中文含义为时分复用同步码分多址接入,是由中国第一次提出、在无线传输技术(RTT)的基础上完成并已正式成为被ITU接纳的国际移动通信标准。这是中国移动通信界的一次…

解读ESSumm: Extractive Speech Summarization from Untranscribed Meeting

ESSumm: Extractive Speech Summarization from Untranscribed Meeting 从非转录会议中提取语音摘要(非转录:原音频,没有转化为文本或者其他格式) 论文地址 https://arxiv.org/abs/2209.06913 摘要 在本文中,我们为…

JS中的迭代器、可迭代对象、生成器

迭代器 迭代器(iterator),是使用户在容器对象(container,例如链表或数组)上可以遍历访问的对象,使用该接口无需关心容器对象的内部实现细节。 从上面定义上来看,迭代器是帮助我们对…

SpringMVC 源码学习 返回值处理

SpringMVC中对返回值的数据基本分为两类&#xff1a; 1、响应数据 2、响应页面 一、响应数据 响应数据大多数都是将返回值的格式转换为JSON格式然后展示在页面或者保存i起来。 第一步&#xff1a;在SpringBoot中需要引入json场景 <dependency><groupId>org.sprin…

如何设计存储架构

步骤 步骤1&#xff1a;估算性能需求 任务 基于具体的业务场景来估算性能需求&#xff0c;包括存储量、读写性能等 挑战 不知道如何估算担心估算不准 步骤2&#xff1a;选择存储系统 任务 根据技术储备、方案优缺点选择合适的存储系统 挑战 不知道有哪些存储系统知道…

UG NX二次开发(C#)-UI Styler-批量选择点

1、前言 在设计UG NX的对话框界面时,有时需要选择点,在UI Styler编辑器中已经设置好了可以指定点选择按钮,这个点选择对话框是单选,不是多选的,如果想选择多个点,那么可以采用对象选择按钮,本文介绍下选择点的操作。 2、指定点按钮 2.1 设计UI Styler UG NX的UI Sty…