热门标签 | 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

待续。。。


推荐阅读
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 近期我们开发了一款包含天气预报功能的万年历应用,为了满足这一需求,团队花费数日时间精心打造并测试了一个稳定可靠的天气API接口,现正式对外开放。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文介绍了如何在WildFly 10中配置MySQL数据源时遇到的服务依赖问题及其解决方案。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • ArcXML:互联网空间数据交换的专用语言
    ArcXML是一种专为ArcIMS平台设计的数据交换协议,基于XML标准,用于在不同组件之间传输和描述地理空间数据。本文将详细介绍ArcXML的背景、用途及其与XML的关系。 ... [详细]
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • 主板市盈率、市净率及股息率的自动化抓取
    本文介绍了如何通过Python脚本自动从中国指数有限公司网站抓取主板的市盈率、市净率和股息率等关键财务指标,并将这些数据存储到CSV文件中。涉及的技术包括网页解析、正则表达式以及异常处理。 ... [详细]
  • Python并行处理:提升数据处理速度的方法与实践
    本文探讨了如何利用Python进行数据处理的并行化,通过介绍Numba、多进程处理以及Pandas DataFrame上的并行操作等技术,旨在帮助开发者有效提高数据处理效率。 ... [详细]
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社区 版权所有