首页 > 其他分享 >day14- 文件

day14- 文件

时间:2024-06-07 16:13:58浏览次数:22  
标签:文件 data day14 file content txt open

Python提供了内置的文件对象,以及对文件、目录进行操作的内置模块 文件有两个属性,文件名和路径

1、文件路径

文件路径大家都理解,比如我有一个文件log.txt文件放在D盘,"D:\log.txt"这个就是这个文件的文件路径 路径分为绝对路径和相对路径

绝对路径

总是从根目录开始,不依赖当前的工作目录 Window 系统中以盘符(C:、D:)作为根文件夹。例如:C:\Users\YourName\Documents\file.txt 而 OS X 或者 Linux 系统中以 / 作为根文件夹。例如:/home/yourname/documents/file.txt  

相对路径

相对路径是相对于当前工作目录的路径
project/
│
├── main.py
└── data/
    └── file.txt

 

如果我们读取file.txt文件,我们就可以使用相对路径,data/file.txt就是上述的相对路径 读取文件使用open函数,下边我们详细讲解,这里我们直接使用
file_path = 'data/file.txt'
with open(file_path, 'r') as file:
    lines = file.readlines()
    print(lines)
    
# 执行结果
['abcdefg']

 

 

路径拼接

我们在实际工作中,会经常联合使用,比如文件的工作目录是不固定的,但是文件在项目中是固定的,所以我们确定文件的相对路径,然后拼接文件在项目中的路径,这样不管目录怎么变,我们文件的指向路径永远不会出错 首先我们用到了os模块
  • os.path.join(path1, path2, ...): 拼接路径
  • os.path.dirname(__file__):当前文件的工作目录
还是上述的文件例子:
project/
│
├── main.py
└── data/
    └── file.txt

 

我们使用拼接的方式确定file.txt文件的路径
import os

# 获取当前文件的所在的目录
base_dir = os.path.dirname(__file__)

# 将路径与文件名连接起来
file_path = os.path.join(base_dir, 'data/file.txt')

# 打开文件,并读取所有行
with open(file_path, 'r') as file:
    lines = file.readlines()
    print(lines)
 

2、open文件

open() 函数是Python内置的一个函数

认识open

f = open('文件路径', mode='r')
查看一下源码
  • file: 要打开的文件路径(字符串)或文件对象。
  • mode: 打开文件的模式,如 'r'(读取)、'w'(写入)、'a'(追加)等
模式 可做操作 若文件不存在 是否覆盖
r 只读 error -
r+ 读写 error T
w 只写 create T
w+ 读写 create T
a 只写 create F,尾部追加写
a+ 读写 create F,尾部追加写
wb 只写二进制字符串,写入bytes create T
rb 只读二进制字符串,返回bytes error -

打开操作三板斧

1.打开文件:open函数,返回文件对象 2.对文件进行读写操作,read()函数/write()函数 3.关闭文件:close函数,关闭文件  

小栗子

打开project项目下的file文件,打印输出读取文件的内容
project/
│
├── main.py
└── data/
    └── file.txt

 

练习:
# 1、打开文件
f = open('data/file.txt', 'r')

# 2、读取文件内容
content = f.read()
print(content)

# 3、关闭文件
f.close()

 

 

3、open另一种写法

上边我们已经学会了open函数的使用以及操作文件的三板斧 但是呢,还是会有问题的,在上边的表格中我们可以看到,如果文件不存在的时候,运行代码会报错 而且当文件读写时都有可能产生 IOError ,一旦出错,后面的 f.close() 就不会调用  

with open

所以我们使用open函数还有另一种用法
with open()用法
好处:结合了 open() 函数和上下文管理器 with 语句,用于打开文件并在操作完成后自动关闭文件
with open(file_path, mode, encoding) as file:
    # 在文件上进行操作
    # 文件会在代码块退出后自动关闭
 
encoding编码格式小知识: f = open(...)是由操作系统打开文件,如果打开的是文本文件,会涉及到字符编码问题,如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8; f = open('a.txt','r',encoding='utf-8')

小栗子

还是上述那个例子
project/
│
├── main.py
└── data/
    └── file.txt

 

我们使用with...open函数打开读取文件,打印输出文件内容
# 使用with语句打开文件file.txt,以只读模式
with open('data/file.txt', 'r') as f:
    # 将文件内容读取到content变量中
    content = f.read()
    # 打印content变量
    print(content)
    
# 执行结果
abcdefj

 

4、文件操作的模式

这里我们讲三种文件操作模式:
  • r(默认的):只读
  • w:只写
  • a:只追加写

r 模式的使用

# r只读模式: 在文件不存在时则报错
 with open('data/file.txt', 'r') as f:
    content = f.read()
    print(content)

 

读取文件,如果不命名编码格式,默认采用gbk编码格式,这里如果我们要读取的文件格式是utf-8,这时候我们可以open函数指定添加文件的编码格式
# 增加coding编码格式
with open('data/file.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

 

w 模式的使用

# w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件写入新内容
with open('data/file.txt', 'w', encoding='utf-8') as f:
    f.write('你好,世界!\n')
    f.write('你好,中国!\n')
    f.write('111\n222\n333\n')

 

写入文件我们先把mode模式改成w,然后在下边调用文件对象的write方法写入文件内容,注意的是,如果文件不存在不会报错,会自动创建然后写入文档,如果文件存在有内容,写入内容后文件内容会清空写入新内容 查看写入内容:

a模式的使用

# a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件内容追加写入内容
 with open('data/file.txt', 'a', encoding='utf-8') as f:
    f.write('追加的内容1\n')
    f.write('追加的内容2\n')
    f.write('111\n222\n333\n')

 

查看追加内容:

w 模式与 a 模式的异同

  • 相同:都是往文件写入内容,文件不存在的时候会创建文件
  • 不同:w模式是每次写入都会清空原来的文件内容,把写入的内容写入到文件里,a模式是不会清空原来的文件内容,会在后边追加写入文件内容

5、读写文件

文件读取read()、readline()、readlines()

  read() 优点:逐个字节或字符读取所有内容 劣势:大文件太大无法读取,不适用于读取大文件
with open('data/file.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

 

  readline() 优点:逐行读取文件内容 劣势:比readlines()慢很多
with open('data/file.txt', 'r', encoding='utf-8') as f:
    content = f.readline()
    print(content)

 

使用readline只会读取一行数据,而且读取第一行内容时,会读取最后的换行符,所以使用print函数打印的时候默认会换行,多出一个空行 这块我们可以使用数字来控制读取的字节数
with open('data/file.txt', 'r', encoding='utf-8') as f:
    # 读取6个字符数
    content = f.readline(6)
    print(content)

 

  readlines() 优点:读取所有行文件内容;自动将文件内容分析成一个行的列表
with open('data/file.txt', 'r', encoding='utf-8') as f:
    content = f.readlines()
    print(content)

 

执行结果:
['你好,世界!\n', '你好,中国!\n', '111\n', '222\n', '333\n', '追加的内容1\n', '追加的内容2\n', '111\n', '222\n', '333\n']

 

你会发现:
  • readlines()读取所有行然后把它们作为一个字符串列表返回
  • 返回的每一行内容包含换行符

文件写入write()和writelines()

  write() 优点:向文件写入单行字符串数据 每次调用write()都会将参数字符串写入文件,不会自动添加换行符
with open('data/file.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

 

  writelines() 优点:向文件写入字符串列表 一次性向文件写入多行字符串数据符
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('data/file.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

 

day14练习

初级: 1.打开文件操作三步骤是什么 2.文件操作的几种模式 3.读写文件的函数   中级: 1.编写一个程序,将指定的文本,"我是追加的文本内容",追加到文件,file.txt,的末尾 2.编写一个程序,统计指定文件的总行数,文件如下: 3.编写一个程序,将一个文件的内容复制到另一个文件中,a文件内容复制到b文件,如a文件内容如下: 高级 1.编写一个程序,统计指定文件中每个单词出现的次数,文件内容如下:          

标签:文件,data,day14,file,content,txt,open
From: https://www.cnblogs.com/nuomituan/p/18237370

相关文章

  • 文件格式转换器哪个工具更好用?
    文件格式转换器哪个好用?相信很多小伙伴在处理PDF文件时会遇到各种各样的问题,不晓得的选择哪款文件格式转换器!这个时候我们该如何解决呢?以下是文件格式转换器推荐,一起来看看吧。一、AdobeAcrobat推荐指数★★★☆☆AdobeAcrobat是一款非常成熟的在线PDF转换软件,软件拥有扫描PD......
  • MainWindows移动View文件夹和使用Window.DataContext单例绑定需要修改的地方
    项目结构移动文件夹后需要修改的三个地方1、App.xaml2、MainWindow.xaml3、MainWindow.xaml.cs单例绑定需要修改的地方MainWindow.xaml ......
  • 解决DNF游戏启动故障:缺少ClientBase.dll文件的高效应对策略
    《地下城与勇士》(DNF)是一款风靡全球的2D横版卷轴式大型多人在线角色扮演游戏,以其街机风格的爽快打击感、丰富多样的职业体系、深渊副本挑战、PVP竞技场以及装备打造系统著称,引领玩家在阿拉德大陆展开惊心动魄的冒险之旅。当遇到DNF(地下城与勇士)游戏在启动时提示缺少ClientBase.......
  • 如何避免U盘数据泄露?U盘重要文件怎么加密?
    U盘是最常用的移动存储设备,小巧的体积可以帮助我们存储大量数据。而为了保护U盘数据,避免文件泄露,我们需要加密保护U盘。那么,U盘重要文件该怎么加密呢?下面我们就来了解一下吧。BitLocker当你的U盘文件不多,且加密需求比较简单时,可以选择使用BitLocker加密工具。它可以全盘加......
  • 单个python文件代码的车牌检测系统 使用pyqt做界面进行车牌检测,可以保存结果到excel文
    融合了hyperlpr3和opencv来检测车牌通过图片检测车牌的系统,使用了pyqt和hyperlpr3结合来进行检测,可以保存检测的结果到excel文件 亲自测试修改代码,运行正常并且不依赖百度网络api,纯本地运行,融合了2个车牌检测模型,第一个模型使用opencv来模糊图像,然后进行边缘检测和......
  • 请求结束后删除文件
    fromflaskimportFlask,send_from_directoryimportosimportatexitapp=Flask(__name__)#假设这是你的文件高亮处理类classFileHighlighter:def__init__(self,file_path,chunk_id_list):self.file_path=file_pathself.chunk_id_list=......
  • 在Linux中,有哪些系统日志文件?
    在Linux系统中,系统日志文件是记录系统操作、运行状态、错误信息以及安全事件等的重要文件。以下是Linux中常见的系统日志文件及其简要描述:系统日志(SystemLogs):这些日志记录了系统整体运行情况、错误信息等。常见的系统日志文件包括/var/log/messages、/var/log/syslog等。这......
  • anaconda环境 使用PyInstaller打包,运行exe文件出现导入_ssl错误
    使用PyInstaller打包后运行exe文件出现错误NameError:name'ssl'isnotdefined。观察PyInstaller打包程序输出,发现找不到DLL文件的警报,查看对应环境下的DLLs文件夹发现导入ssl的DLL文件缺失。查阅资料发现由于anaconda环境DLL文件错误存放在lib文件夹下面,致使PyInstaller打包......
  • 如何在 Windows 10/11 上恢复不在回收站中的永久删除文件夹?
    经验丰富的Windows用户将使用Windows备份和还原或文件历史记录来恢复不在回收站中的已删除文件夹。这些工具确实有助于Windows文件夹恢复,但并不总是有效。现在,许多专用的Windows数据恢复软件和免费解决方案都可以取代它们,从而为Windows用户提供了一种成功有效地恢复永久删......
  • 怎么发送超大文件?困扰已久的邮件大附件发送问题解决了!
    邮件是日常中使用最多的文件流转工具,特别是对于企业内部的员工间、及企业与企业间的业务开展,数据和文件的发送、业务留痕大多都基于邮箱展开。邮箱的普遍使用给用户基于邮箱进行业务沟通提供了前提,其中,Outlook邮箱是使用最广泛的邮箱之一。这使得邮箱成为一种最常用的通讯工具,但......