Python基础 - 文件处理(上)
读写文件, 文件备份, 上传资料这些操作应该是大家日常工作中每天都要做的事情. 而文件呢, 又有不同的类型(后缀名), 比如 .txt, .xls, .xlsx, .csv, .json, .sql .... 等等各种文件. 在我日常的数据工作中, 读取文件数据, 处理, 写入文件这样的操作几乎是每天都要做的事情. 我们的从编程入门的角度来讲, 文件处理算是一个最能快速应用到工作的了. 尤其是 不同编程的小伙伴, 如果要是学会了文件处理, 那绝对能大幅度提高工作效率的.
突然想吐槽一下 文件处理
之间接触很多的文员小伙伴, 日常办公, 很大时间都在处理一些表格, 文档之类的, 重复性很高, 然而他们总是去手工一个个处理, 经常加班还觉得自己很充实...其实在我看来, 就是工作效率低下的自我安慰, 一定程度上. 我真的很想分享给他们, 只要稍微学一点点编程, 或有那么一点点编程的思维, 然后求助一下, 比如我, 重复性的工作让机器来做不更好吗, 无非就是一些文件批处理, 什么合并, 提取特定数据 之类的....
突然想起, 以前营销专业课上, 有老师分享说, 最难的事情, 莫过于, "把我的思想, 传输给你的大脑 和 把我的手伸进你的钱包"
回到正题, 首先还是谈下对于 "文件" 的认识.
什么是文件
这对我算是一个灵魂发问.
我认为, 文件就是用来持久化存储数据的载体.
因为数据有不同的种类, 虽然底层都是二进制. 包含了字符, 图片, 声音, 视频这些.... 种类特别多, 因而为了做区分嘛, 才用不同的 文件类型来区分呀.
其实对于文件的认知, 莫过于 Linux 的观点: 一些皆文件.
接触或 Linux 的小伙伴就非常明白, Linux 下, 一切皆是文件. 一个程序, 也是一个文件, 各种配置文件等等. 也可以自定义文件的类型啥的. 都是 open 的, 就是用来存储数据的载体而已. 当然这也是抽象出来的概念, 就不往下深究了. 举个栗子, 一个 win 下的 exe 程序. 它不就是一个以 .exe 作为后缀的文件吗. 里面存储的是程序的代码.还有我们的数据库, 它本质也是将数据 按特定的规则存储的文件 而已. 可见文件在我们生活中扮演了极为重要的角色.
在 Python 中, 主要用 open() 函数来创建文件对象, 用的两个库主要是 os 和 pathlib, 这里主要先讲os, 主要是我个人用得熟练一些. 当然也参考 pathlib, 看了官方文档也还蛮强大的.
文件的open 与 close
我通常会先看看, 我当前的工作路径.
import os
# 查看当前路径
os.getcwd()
Out[4]: 'E:\\Jupyter notes\\Python_data_struct'
# 查看当前路径下有哪些文件
os.listdir()
Out[3]: ['.git', '.gitignore', '.idea', 'pythonds', 'test.py']
然后读取文件, 通常的写法是这样的, 用 with 这个上下文管理器.
with open("./test.py", 'r') as f:
f.read()
# 然后各种处理
- 'r' : 只读, 指针在头部, 这是默认模式.
- 'w' : 只写, 指针在头部, 若文件已存在, 则会覆盖, 不存在则新建.
- 'a' : 追加, 存在内容则指针在头; 不存在则新创建
- 'rb' : 只读, 以二进制格式打开文件
- 'wb' : 只写, 以二进制格式写入, 存在则覆盖, 不存在则新建
- 'r+' : 打开一个文件, 可读可写, 指针在头
- 'w+' : 打开一个文件, 可读可写, 存在则覆盖, 不存在则新增
- 'a+' : 追加, 可读可写, 指针在尾, 不存在则会新建
...
常用的无非就是这些, 读, 写, 和追加嘛.
文件的 read 和 write
数据读取有 3 中方式, 读取固定长度, 读取一行, 全读.
Python 的文件对象, 其实是一个 "迭代器", 创建的时候并未全部加载内存, 用一点, 取一点
- f.read() 默认是"全读", f.read(n) 表示读取长度为 n 的数据
- f.readline() 读一行. 若要全读则 while True ... 直到 len(某行)==0 break. 中间可对每行自定义处理
- f.readlines() 全读. 返回一个列表, 每一行是列表的一个元素. 我用的挺少的.
写入数据: f.write(string...)
# 全读
with open("test.py", 'r+') as f:
print(f.read())
123
456
'abc', 'def'
'hello'
# 读取固定长度
with open("test.py", 'r+') as f:
print(f.read(5))
123
4
# 读取一行
with open("test.py", 'r+') as f:
print(f.readline())
print(f.readline())
123
456
# 以列表方式返回
with open("test.py", 'r+') as f:
print(f.readlines())
# 再往后写一条, 如果不加换行符 '\n' 则直接 append 到后面的哦
f.write("youge")
['123\n', '456\n', "'abc', 'def'\n", "'hello'youge"]
更常见的情景是按行读, 对每行进行一个操作.
with open("test.py") as f:
while True:
line = f.readline().strip()
print(line)
if len(line) == 0:
print("---end----")
break
123
456
'abc', 'def'
'hello'youge
---end----
case 文件备份
原理即从 A 文件 read() 然后 write() 到 B 文件而已.
def backup_file(file_name):
"""文件备份"""
try:
# 1. 读取文件
cur_file = open(file_name, 'rb')
except Exception:
print("未找到该文件 或 读取错误")
return
# 2. 找到文件后缀, 先找分割点位置 如 abc.txt 则'.' 的 index = 3
point_index = file_name.rfind('.')
suffix = file_name[point_index +1:]
# 3. 构建新的文件名
new_file_name = file_name[:point_index] + "副本" + suffix
# 4. 将数据写进新的文件即可
new_file = open(new_file_name, 'wb')
for line in cur_file.readlines():
new_file.write(line)
print()
print('---正在备份---')
print("备份成功!")
# 关闭文件
cur_file.close()
new_file.close()
if __name__ == '__main__':
# test
filename = input("请输入您要备份的文件名(包含后缀哦): \n")
backup_file(filename)
请输入您要备份的文件名(包含后缀哦):
test.py
---正在备份---
备份成功!
看看手动异常处理:
请输入您要备份的文件名(包含后缀哦):
fdsdsfsdfsdf
未找到该文件 或 读取错误
Process finished with exit code 0
文件定位
即定位光标的位置在哪, 工作用这个倒是用得挺少的.
获取当前光标位置: 用 tell() 函数即可
f = open('test.py')
# 当前位置
print("position:", f.tell())
print('get data:', f.read(2))
print("position:", f.tell())
print('get data:', f.read(3))
print("position:", f.tell())
f.close()
position: 0
get data: 12
position: 2
get data: 3
4
position: 6
定位到某个位置: 用 seek() 函数即可.
seek(offset, whence). offset 表示偏移量. whence 默认为0, 表示文件开头. 1表示当前位置, 2表示文件末尾.
f = open('test.py')
print('get data:', f.read(2))
print("position:", f.tell())
# 定位到
f.seek(3, 0)
print('position:', f.tell())
f.close()
get data: 12
position: 2
position: 3
小结
- 通俗理解文件就是持久化存储数据的载体, Linux 万物皆文件, 程序, 字符, 数字, 图片, 声音都是文件
- 文件的 open, 方式常用的就 'r', 'r+', 'w', 'a+' 即读, 写, 追加, 这样子而已.
- 读取文件数据有 3种方式 f.read(); f.readline(); f.readlines() . 后两种非常常用哦
- 文件的光标定位, 当前位置 tell(), 定位到某位置 seek(offset, whence), 我工作中几乎从未用到过
上篇就初步认识读写文件就行, 下篇主要是对两个模块 os, 和 pathlib 进行认识, 配合起来, 文件的绝大多数操作就没啥问题了, 然后如果再会用处理点数据, 对于 文员来说, 办公效率提升至少 10倍, 在某些固定任务上, 作为过来人的一点认知分享, 真的是这样子.
Python基础 - 文件处理(上)的更多相关文章
- python 基础-文件读写'r' 和 'rb'区别
原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...
- Python基础教程2上的一处打印缺陷导致的代码不完整#1
#1对代码的完善的 出现打印代码处缺陷截图: 图片上可以看到,定义的request根本没有定义它就有了.这个是未定义的,会报错的,这本书印刷问题,这个就是个坑,我也是才发现.花了点时间脱坑. 现在发完 ...
- Python基础--文件操作和集合
这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 ...
- python基础--文件操作实现全文或单行替换
python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...
- python基础-文件操作
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...
- 第3章 Python基础-文件操作&函数 文件操作 练习题
一.利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target ...
- python基础----文件处理
一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...
- python基础-文件读写'r' 和 'rb'区别
一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据.'w':表示要向文件写入数据,并 ...
- python基础 - 文件读写
完成功能: 从指定位置读文件到控制台 #! /usr/bin/python # coding=utf- 方法一. try: f = open ('/root/python/file/001.txt', ...
- python基础-文件操作(10)
一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:“好记性不如烂笔头”. 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了 ...
随机推荐
- DevExpress WPF 在RibbonControl的Header中添加搜索框
主要代码: <dxb:BarEditItem Name="txtSearch" EditHorizontalAlignment="Center"> ...
- [ARC148C] Lights Out on Tree 题解
在考场遇到了这道题,感觉很有意思. 当时直接想到的就是虚树,可惜打挂了. 后来改对了,写篇题解纪念一下. 首先看到 \(\sum M_i\le 2\times 10^5\),很容易想到虚树的数据范围. ...
- CF935D Fafa and Ancient Alphabet 题解
讲一个很暴力的方法(为描述方便,下文 \(a\) 数组代表 \(s1\),\(b\) 数组代表 \(s2\)). 发现假如当前 \(a_i\ne b_i\),就不需要再向下枚举了,于是拥有了分类讨论的 ...
- Win10打开IE自动跳转至Edge解决办法
WIN + R输入inetcpl.cpl弹出Internet属性对话窗口 点击上面菜单中的[高级]选项 滑动右侧滚动条,找到[浏览]项下面的[启用第三方浏览器拓展*]并取消勾选 双击IE浏览器图标测试 ...
- 【自荐】Catime v1.0.4 一款贼好用的计时器
Github: https://github.com/vladelaina/Catime 仅1.3MB!!!!! 特点 极简设计: 透明界面.点击穿透.可调大小和位置.多语言支持 丰富字体: 47种字 ...
- 使用form-create监听组件的事件
FormCreate 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持5个UI框架,并且支持生成任何 Vue 组件.内置20种常用表单组件和自定义组件,再复杂的 ...
- linux 删除文件提示 opration not permitted 处理方法(宝塔删除文件提示无法删除)
问题描述:linux系统中使用rm -rf强制删除文件,提示 opration not permitted,无法删除成功(宝塔删除文件提示无法删除),该问题确定为已关闭所有安全软件及防止恶意篡改的软件 ...
- python3 ModuleNotFoundError: No module named 'CommandNotFound'
前言 python3 报错:ModuleNotFoundError: No module named 'CommandNotFound' 这是 linux 安装多版本 python 时的一个遗留问题, ...
- mysql-installer-community-8.0.19.0.msi 的自定义安装与卸载
一.双击运行安装包执行安装 1.选择Custom,该种方式可以设置安装位置,仅安装所需的组件,点击Next 2.选择需要的组件,点击Advanced Options 3.设置安装位置,点击OK 4.点 ...
- CSAPP学习笔记——Chapter10,11 系统级I/O与网络编程
CSAPP学习笔记--Chapter10,11 系统级I/O与网络编程 Chapter10 系统级I/O 系统级I/O这一章的内容,主要可以通过这张图概括: Unix I/O模型是在操作系统内核中实现 ...