热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python基础(四)文件

本文是我在学习期间的笔记,看的书是《python语言及其应用》。转载请注明出处,谢谢。本文链接https:blog.csdn.netMing201712

本文是我在学习期间的笔记,看的书是《python语言及其应用》。
转载请注明出处,谢谢。
本文链接 https://blog.csdn.net/Ming2017123123/article/details/98380239


  • 文件输入输出
    • open()
      • mode的第一一个字母
      • mode的第二个字母
      • 最后要关闭文件
    • write()
    • print()
    • 分段写入
    • 避免重写
      • 处理异常
    • read()
      • 设置最大读入限制
    • readline()
    • 使用迭代器
    • readlines()
    • 使用 write() 写二进制文件
      • 分块写二进制数据
    • 使用 read() 读二进制文件
    • 使用 with 自动关闭文件
    • 使用 seek() 改变函数位置
    • seek(offset, origin)
  • 结构化的文本文件
    • csv
    • XML
    • HTML
    • JSON
    • yaml


文件输入输出


  • 数据持久化最简单的类型是普通文件,有时也叫平面文件(flat file)
  • 它仅仅是在一个文件名下的字节流


open()

fileob = open(filename, mode)


mode的第一一个字母


  • r 读模式
  • w 写模式,如果文件不存在就创建,存在就重写新的内容
  • x 在文件不存在的情况下创建新文件并写文件
  • a 如果文件存在,就在文件末尾追加内容


mode的第二个字母

代表文件类型


  • t (或者省去)代表文本类型
  • b 代表二进制文件


最后要关闭文件


write()


  • write() 函数返回写入文件的字节数

poem = '''There was a young lady named Bright,
Whose speed was far faster than light;
She started one day
In a relative way,
And returned on the previous night.'''

print('len(poem)',len(poem))
fout = open('relativity','wt')
print(fout.write(poem))
fout.close()


print()


  • 也可以使用print() 函数

fout = open('relativity','wt')
print(poem, file=fout)
fout.close()

  • print() 会在每个参数后添加空格,在每行结束后添加换行。
  • sep 分割符:默认是一个空格 ’ ‘
  • end 结束字符:默认是一个换行’\n’

fout = open('relativity','wt')
print(poem, file=fout, sep='', end='')
fout.close()


分段写入

fout = open('relativity','wt')
size = len(poem)
offset = 0
chunk = 100
while True:if offset > size:breakprint(fout.write(poem[offset:offset+chunk]))offset += chunkfout.close()


避免重写

fout = open('relativity','xt')
fout.write('stomp stomp stomp')
fout.close()


处理异常

try:fout = open('relativity','xt')fout.write('stomp stomp stomp')
except FileExistsError:print('relativity already exists! That was a close one.')


read()


  • 不带参数的read() 一次读取文件的所有内容

fin = open('relativity','rt')
poem = fin.read()
fin.close()
print(len(poem))


设置最大读入限制


  • 读到文件结尾,再调用 read() 函数会返回空字符串’’ ,

poem = ''
fin = open('relativity','rt')
chunk = 100
while True:fragment = fin.read(chunk)if not fragment:breakpoem += fragment
fin.close()
print(len(poem))


readline()


  • 对于文本文件,即使空行也有一个字符长度(换行字符’\n’)

poem = ''
fin = open('relativity','rt')
while True:line = fin.readline()if not line:breakpoem += linefin.close()
print(len(poem))


使用迭代器


  • iterator

poem = ''
fin = open('relativity','rt')
for line in fin:poem += linefin.close()
print(len(poem))


readlines()


  • 读入所有的行,并返回单行字符串的列表
  • print() 默认在每行结束加上换行

fin = open('relativity','rt')
lines = fin.readlines()
fin.close()
print(len(lines)," lines read")
for line in lines:print(line, end='')print('newline')for line in lines:print(line)


使用 write() 写二进制文件

bdata = bytes(range(0,256))
print(len(bdata))fout = open('bfile','wb')
print(fout.write(bdata))
fout.close()


分块写二进制数据

fout = open('bfile','wb')
size = len(bdata)
offset = 0
chunk = 100
while True:if offset > size:breakprint(fout.write(bdata[offset:offset+chunk]))offset += chunkfout.close()


使用 read() 读二进制文件

fin = open('bfile','rb')
bdata = fin.read()
print(len(bdata))
fin.close()


使用 with 自动关闭文件

with open('relativity','wt') as fout:print(fout.write(poem))


使用 seek() 改变函数位置


  • tell() 返回距离文件开始处的字节偏移量
  • seek() 允许跳转到文件其他字节偏移量的位置
  • seek() 同样返回当前的偏移量

fin = open('bfile','rb')
print(fin.tell())
print(fin.seek(255))
bdata = fin.read()
print(len(bdata))
print(bdata[0])


seek(offset, origin)


  • origin = 0, 从开头偏移offset个字节
  • origin = 1, 从当前位置处偏移offset个字节
  • origin = 2, 距离最后结尾处偏移offset个字节

这些值也在os模块中定义

import os
print('os.SEEK_SET :',os.SEEK_SET)
print('os.SEEK_CUR :',os.SEEK_CUR)
print('os.SEEK_END :',os.SEEK_END)

  • 用不同的方法读取最后一个字节

fin = open('bfile','rb')
print(fin.seek(-1, 2))
print(fin.tell())
bdata = fin.read()
print(len(bdata))
print(bdata[0])

  • 从当前位置寻找

fin = open('bfile','rb')
print(fin.seek(254,0))
print(fin.tell())
print(fin.seek(1,1))
print(fin.tell())
bdata = fin.read()
print(len(bdata))
print(bdata[0])

  • 最流行的编码格式(例如UTF-8)每个字符的字节数都不仅相同


结构化的文本文件


csv

import csvvillains = [['Docter','No'],['Rosa','Klebb'],['Mister','Big'],['Auric','Goldfinger'],['Ernst','Blfeld'],
]
with open('villains','wt') as fout:csvout = csv.writer(fout)csvout.writerows(villains)

  • test

cat villains

| Docter | No |
| Rosa | Klebb |
| Mister | Big |
| Auric | Goldfinger |
| Ernst | Blfeld |


  • 重新读入

import csv
with open('villains','rt') as fin:cin = csv.reader(fin)willains = [row for row in cin]print(willains)

  • 读入的数据也可以是字典集合

import csv
with open('villains','rt') as fin:cin = csv.DictReader(fin,fieldnames=['first','last'])villains = [row for row in cin]print(villains)

  • 用 DictWriter() 重写 CSV 文件

import csv
villains = [{'first': 'Doctor','last':'No'},{'first':'Rosa','last':'Klebb'},{'first':'Mister','last':'Big'},
]
with open('villains','wt') as fout:cout = csv.DictWriter(fout,['first','last'])cout.writeheader()cout.writerows(villains)

cat villains

  • 再来读取文件

import csv
with open('villains','rt') as fin:cin = csv.DictReader(fin)villains = [row for row in cin]print(villains)


XML


HTML


JSON


yaml

待续。。。


推荐阅读
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 本文介绍如何使用 Python 的 Pandas 库中 Series 对象的 round() 方法,对数值进行四舍五入处理。该方法在数据预处理和分析中非常有用。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 本文介绍了如何使用 Python 的 Matplotlib 和 Pandas 库进行数据可视化。通过示例代码展示了折线图、柱状图和水平柱状图的创建方法,并解释了图表参数设置的具体细节。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文旨在探讨如何利用决策树算法实现对男女性别的分类。通过引入信息熵和信息增益的概念,结合具体的数据集,详细介绍了决策树的构建过程,并展示了其在实际应用中的效果。 ... [详细]
  • python时间序列之ADF检验(1)
    读取数据,pd.read_csv默认生成DataFrame对象,需将其转换成Series对象DataFrame和Series是pandas中最常见的2 ... [详细]
author-avatar
欧阳火凡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有