python的文件操作极其利用的实验,【Chapter 3.3】Python 的文件以及操作系统《利用Python进行数据分析·第2版》...

本文主要是介绍python的文件操作极其利用的实验,【Chapter 3.3】Python 的文件以及操作系统《利用Python进行数据分析·第2版》...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Chapter 3.3】Python 的文件以及操作系统

用内建的open函数能打开、读取、写入一个文件,要给open一个相对路径或绝对路径:

In [207]: path = 'examples/segismundo.txt'

In [208]: f = open(path)

默认情况下,文件是以只读模式('r')打开的。然后,我们就可以像处理列表那样来处理这个文件句柄f了,比如对行进行迭代:

for line in f:

pass

从文件中取出的行都带有完整的行结束符(EOL),因此你常常会看到下面这样的代码(得到一组没有EOL的行):

In [209]: lines = [x.rstrip() for x in open(path)]

In [210]: lines

Out[210]:

['Sueña el rico en su riqueza,',

'que más cuidados le ofrece;',

'',

'sueña el pobre que padece',

'su miseria y su pobreza;',

'',

'sueña el que a medrar empieza,',

'sueña el que afana y pretende,',

'sueña el que agravia y ofende,',

'',

'y en el mundo, en conclusión,',

'todos sueñan lo que son,',

'aunque ninguno lo entiende.',

'']

如果使用open创建文件对象,一定要用close关闭它。关闭文件可以返回操作系统资源:

In [211]: f.close()

用with语句可以可以更容易地清理打开的文件:

In [212]: with open(path) as f:

.....: lines = [x.rstrip() for x in f]

这样可以在退出代码块时,自动关闭文件。

如果输入f =open(path,'w'),就会有一个新文件被创建在examples/segismundo.txt,并覆盖掉该位置原来的任何数据。另外有一个x文件模式,它可以创建可写的文件,但是如果文件路径存在,就无法创建。表3-3列出了所有的读/写模式。

54bfcd31ad21

i

对于可读文件,一些常用的方法是read、seek和tell。read会从文件返回字符。字符的内容是由文件的编码决定的(如UTF-8),如果是二进制模式打开的就是原始字节:

In [213]: f = open(path)

In [214]: f.read(10)

Out[214]: 'Sueña el r'

In [215]: f2 = open(path, 'rb') # Binary mode

In [216]: f2.read(10)

Out[216]: b'Sue\xc3\xb1a el '

read模式会将文件句柄的位置提前,提前的数量是读取的字节数。tell可以给出当前的位置:

In [217]: f.tell()

Out[217]: 11

In [218]: f2.tell()

Out[218]: 10

尽管我们从文件读取了10个字符,位置却是11,这是因为用默认的编码用了这么多字节才解码了这10个字符。你可以用sys模块检查默认的编码:

In [219]: import sys

In [220]: sys.getdefaultencoding()

Out[220]: 'utf-8'

seek将文件位置更改为文件中的指定字节:

In [221]: f.seek(3)

Out[221]: 3

In [222]: f.read(1)

Out[222]: 'ñ'

最后,关闭文件:

In [223]: f.close()

In [224]: f2.close()

向文件写入,可以使用文件的write或writelines方法。例如,我们可以创建一个无空行版的prof_mod.py:

In [225]: with open('tmp.txt', 'w') as handle:

.....: handle.writelines(x for x in open(path) if len(x) > 1)

In [226]: with open('tmp.txt') as f:

.....: lines = f.readlines()

In [227]: lines

Out[227]:

['Sueña el rico en su riqueza,\n',

'que más cuidados le ofrece;\n',

'sueña el pobre que padece\n',

'su miseria y su pobreza;\n',

'sueña el que a medrar empieza,\n',

'sueña el que afana y pretende,\n',

'sueña el que agravia y ofende,\n',

'y en el mundo, en conclusión,\n',

'todos sueñan lo que son,\n',

'aunque ninguno lo entiende.\n']

54bfcd31ad21

Bytes and Unicode with Files

不论是读取还是写入,默认的python文件都是 text mode(文本模式),意味着你是与python string(i.e., Unicode)打交道。这和binary mode(二进制模式)形成了对比。这里举个栗子(下面的文件包含non-ASCII字符,用UTF-8编码):

with open(path) as f:

chars = f.read(10)

chars

'Sueña el r'

UTF-8是一种长度可变的Unicode编码,所以我们想要从文件中读取一定数量的字符时,python会读取足够的bytes(可能从10到40)然后解码城我们要求数量的字符。而如果我们用'rb'模式的话,read只会读取相应的bytes数量:

with open(path, 'rb') as f:

data = f.read(10)

data

b'Sue\xc3\xb1a el '

取决于文本的编码,你能够把bytes解码为str,不过如果编码的Unicode字符不完整的话,是无法解码的:

data.decode('utf8')

'Sueña el '

data[:4].decode('utf8')

UnicodeDecodeError Traceback (most recent call last)

in ()

----> 1 data[:4].decode('utf8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 3: unexpected end of data

在使用open的时候,文本模式是有一个编码选项的,这能更方便我们把一种Unicode编码变为另一种:

sink_path = '../examples/sink.txt'

with open(path) as source:

with open(sink_path, 'xt', encoding='iso-8859-1') as sink:

sink.write(source.read())

with open(sink_path, encoding='iso-8859-1') as f:

print(f.read(10))

Sueña el r

注意:在任何模式下使用seek打开文件都可以,除了二进制模式。如果文件的指针落在bytes(Unicode编码)的中部,那么之后使用read会报错:

In [240]: f = open(path)

In [241]: f.read(5)

Out[241]: 'Sueña'

In [242]: f.seek(4)

Out[242]: 4

In [243]: f.read(1)

---------------------------------------------------------------------------

UnicodeDecodeError Traceback (most recent call last)

in ()

----> 1 f.read(1)

/miniconda/envs/book-env/lib/python3.6/codecs.py in decode(self, input, final)

319 # decode input (taking the buffer into account)

320 data = self.buffer + input

--> 321 (result, consumed) = self._buffer_decode(data, self.errors, final

)

322 # keep undecoded input until the next call

323 self.buffer = data[consumed:]

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid s

tart byte

In [244]: f.close()

我们已经学过了Python的基础、环境和语法,接下来学习NumPy和Python的面向数组计算。

基本和那个翻译的简书一样,我也不想增加或者删除一些文字了,就稍微加点注释,反正也没人关注,应该不会被说抄袭吧?

这篇关于python的文件操作极其利用的实验,【Chapter 3.3】Python 的文件以及操作系统《利用Python进行数据分析·第2版》...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280233

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整