python基础之文件处理总结
读文件:
with open('contacts.txt', 'r', encoding='utf-8') as f:
data = f.read()
二进制模式读
使用场景:网络传输(视频、图片或进行网络传输的文本)
with open('contacts.txt', 'rb') as f:
data = f.read()
print(data) # 打印出16进制的编码格式
检测编码的工具
import chardet
with open('contacts.txt', 'rb') as f:
data = f.read()
print(data)
print(chardet.detect(data)) # {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} confidence是自信程度
print(data.decode('utf-8')) # 文本的内容
循环文件和写模式操作文件
with open('contacts.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line) # 会多出很多空格
'''
因为print()打印时默认加了换行,所以加上,如果出现文件输出有空行的情况直接将print的换行取消即可。
给print()加一个取消自动换行的end=""参数即可:print(line,end=""),跟windows,unix没有关系。就是这么简单。
'''
with open('兼职.txt', 'w', encoding='utf-8') as f: # w是创建,会清空以前的内容,慎用。
f.write('好好学编程')
with open('兼职.txt', 'wb') as f:
f.write('好好学编程'.encode('utf-8'))
追加模式操作文件
with open('contacts.txt', 'a', encoding='utf-8') as f:
f.write('\n小胖 河北 182 100 13222222222')
with open('contacts.txt', 'ab') as f:
f.write('\n小胖 河北 182 100 13222222222'.encode('utf-8')) # 把二进制用utf-8编码
读写混合模式
with open('contacts.txt', 'r+', encoding='utf-8') as f:
data = f.read()
print('content', data)
f.write('\nnewline 1哈哈')
f.write('\nnewline 2哈哈')
f.write('\nnewline 3哈哈')
f.write('\nnewline 4哈哈') # 在后面追加写的内容
print('new content', f.read()) # 不显示新写的内容,因为写完后光标在最后的位置,后面是空的,所以读出来是空的。
写读模式 ---> 先写后读(几乎没有应用场景)
with open('contacts.txt', 'w+', encoding='utf-8') as f:
data = f.read()
print('content', data)
f.write('\nnewline 1哈哈')
f.write('\nnewline 2哈哈')
f.write('\nnewline 3哈哈')
f.write('\nnewline 4哈哈') # 重新创建,把之前的清空掉在写
print('new content', f.read())
其他功能
flush 强制把内容从内存(缓存)刷到硬盘
readable 判断是否可读。在linux上一切皆文件,网卡、硬盘都是文件,这些是不可读的。
with open('f_flush_test.txt', 'w', encoding='utf-8') as f:
f.write('\ntest2')
f.flush()
print(f.readable()) # False
readline 只读一行,遇到\r或\n为止
with open('contacts.txt', 'r', encoding='utf-8') as f:
print(f.readline(), end='') # 王心[路飞学城]9 46 13813234424
print(f.readline(), end='') # 马纤羽 深圳 173 50 13744234523
# ......
seek 按字符编码所占字节来跳寻找,比如utf-8跳转3个字节,那么seek(3)往前跳一个字。
tell 返回当前文件操作光标位置
with open('seek_test.txt', 'r', encoding='utf-8') as f: # 文本内容:# 好好学习编程
print(f.read(1)) # 好 # read按字符读
print(f.tell()) #
print(f.read(2)) # 好学
print(f.tell()) #
# print(f.seek(11))
# print(f.read(1)) # 报错 'utf-8' codec can't decode byte 0xa0 in position 0: invalid start byte
print(f.seek(12))
print(f.read(1)) # 编
seekable 判断是否可以进行seek操作,和readable一样主要用在linux上
truncate 按指定长度截断文件
with open('truncate_test.txt', 'r+', encoding='utf-8') as f: # 文本内容:学习编程 # r+ 可读可写,若文件不存在报错。
# print(f.tell()) # 0
# print(f.truncate()) # 0
# 默认截断到末尾
# f.seek(3)
# f.truncate() # 文本内容只剩下"学"了,把后面的都截断了。
# 可以自己写参数指定从哪开始截断,并不是依据光标位置截断,而是从头开始截多少。
f.seek(3)
f.truncate(9) # 文本内容剩下"学习编"了
文件修改功能 word和vim是把内容全部加载到内存上,当在内存修改完保存后,它们在把所有内容重新写到硬盘上,所以可以实现任意字符的修改。这是用占内存的方式来修改文件 下面是用占硬盘的方式来修改
import os f_name = 'contacts.txt'
f_new_name = "%s.new" % f_name old_str = '马纤羽'
new_str = 'new马纤羽' f = open(f_name, 'r', encoding='utf-8')
f_new = open(f_new_name, 'w', encoding='utf-8') for line in f:
if old_str in line:
line = line.replace(old_str, new_str)
f_new.write(line) with open(f_name, 'r', encoding='utf-8') as f:
for line in f:
if old_str in line:
line = line.replace(old_str, new_str)
with open(f_new_name, 'a', encoding='utf-8') as f_new:
f_new.write(line)
os.rename(f_new_name, f_name) # 把新文件名替换成旧文件名,这样就替换了旧文件 # 完成后contacts.txt文件里之前是马纤羽的都变成了new马纤羽
下面是用占内存的方式来修改
with open('contacts.txt', 'r+', encoding='utf-8') as f:
data = f.read()
data = data.replace('杜姗姗', 'Alex')
f.seek(0)
f.write(data) # 如果是减内容的话(比如以前是1个G,改完后就剩800MB了),可以用truncate截取到800MB那个点。
python基础之文件处理总结的更多相关文章
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化
在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...
- python基础之文件处理
读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...
- Python基础、文件处理
一.概述 Python中操作文件是通过file对象来处理的,步骤: 指定文件的路径.操作的模式 对文件进行操作,读或写操作 关闭文件对象 f = open( '文件路径','访问模式') # 打开文件 ...
- python基础4文件操作
在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...
- Python基础之文件处理、函数、内置函数 (三)
内置函数 一 详细见python文档,请点击 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开 ...
随机推荐
- python大战机器学习——支持向量机
支持向量机(Support Vector Machine,SVM)的基本模型是定义在特征空间上间隔最大的线性分类器.它是一种二类分类模型,当采用了核技巧之后,支持向量机可以用于非线性分类. 1)线性可 ...
- JS中void(0)的含义
看别人些的JavaScript脚本可以看到这样的代码: <a href="javascript:doTest2();void(0);">here</a> 但 ...
- 织梦修改文档HTML默认保存路径
\data\config.cache.inc.php $cfg_arcdir = '/a'; 改为 $cfg_arcdir = '/';
- ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用
早在2010年年底,牛魔王中王在其博客空间牛魔王的作坊中对ArcGIS 10中推出的紧凑型缓存格式进行了详细的解读,详见<ArcGIS 切片缓存紧凑文件格式分析与使用>.紧随着的4年时间里 ...
- iOS - runtime 常用方法举例说明
使用的自定义类,如下: #import <Foundation/Foundation.h> @interface Person : NSObject @property(nonatomic ...
- pm2-web监控
pm2-web 是一款 pm2 服务状态监控程序,基于 web . 安装 npm install -g pm2-web 运行(默认占用8080端口) pm2-web 自定义配置文件 通过 --conf ...
- python3发送邮件02(简单例子,带附件)
#!/usr/bin/env python# -*- coding:UTF-8 -*- import osimport smtplibfrom email.header import Headerfr ...
- Red Hat Enterprise Linux(RHEL)中yum的repo文件详解
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...
- groupmod - 修 改 群 组
总览 SYNOPSIS groupmod [-g gid [-o]] [-n group_name ] group 描述 DESCRIPTION groupmod 命 令 会 参 照 你 命 令 列 ...
- Problem C: 查找最大元素
Problem C: 查找最大元素 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 786 Solved: 377[Submit][Status][Web ...