python 文件file操作(1)

简介: file>>> dir(file)['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash_...

file

>>> dir(file)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

打开文件 open()

在某个文件夹下面建立了一个文件,名曰:m1.txt,并且在里面输入了如下内容:

learn python
http://hiekay.github.io

下图显示了这个文件的存储位置:


img_d6cff7444c69615c5821801b1c7f64cd.png
image.png

在上面截图中,我在当前位置输入了python(我已经设置了环境变量,如果你没有,需要写全启动python命令路径),进入到交互模式。在这个交互模式下,这样操作:

>>> f = open("m1.txt")     #打开已经存在的文件
>>> for line in f:
...     print line
...
learn python

http://hiekay.github.io

将打开的文件,赋值个变量f,这样也就是变量f跟对象文件m1.txt用线连起来了(对象引用)。

接下来,用for来读取文件中的内容,就如同读取一个前面已经学过的序列对象一样,如list、str、tuple,把读到的文件中的每行,赋值给变量line。也可以理解为,for循环是一行一行地读取文件内容。每次扫描一行,遇到行结束符号\n表示本行结束,然后是下一行。

从打印的结果看出,每一样跟前面看到的文件内容中的每一行是一样的。只是行与行之间多了一空行,前面显示文章内容的时候,没有这个空行。或许这无关紧要,但是,还要深究一下,才能豁然。

在原文中,每行结束有本行结束符号\n,表示换行。在for语句汇总,print line表示每次打印完line的对象之后,就换行,也就是打印完line的对象之后会增加一个\n。这样看来,在每行末尾就有两个\n,即:\n\n,于是在打印中就出现了一个空行。

>>> f = open('m1.txt')
>>> for line in f:
...     print line,     #后面加一个逗号,就去掉了原来默认增加的\n了,看看,少了空行。
...
learn python
http://hiekay.github.io

在进行上述操作的时候,有没有遇到这样的情况呢?

>>> f = open('m1.txt')
>>> for line in f:
...     print line,
...
learn python
http://hiekay.github.io

>>> for line2 in f:     #在前面通过for循环读取了文件内容之后,再次读取,
...     print line2     #然后打印,结果就什么也显示,这是什么问题?
...
>>>

如果看官没有遇到上面问题,可以试试。遇到了,这就解惑。不是什么错误,是因为前一次已经读取了文件内容,并且到了文件的末尾了。再重复操作,就是从末尾开始继续读了。当然显示不了什么东西,但是python并不认为这是错误,因为后面就会讲到,或许在这次读取之前,已经又向文件中追加内容了。那么,如果要再次读取怎么办?就重新来一边好了。

特别提醒看官,因为当前的交互模式是在该文件所在目录启动的,所以,就相当于这个实验室和文件m1.txt是同一个目录,这时候我们打开文件m1.txt,就认为是在本目录中打开,如果文件不是在本目录中,需要写清楚路径。

  • 如果不在 文件相同目录下访问文件:
>>> f = open("m1.txt")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'm1.txt'

>>> f = open("xxx/m1.txt")     #必须得写上路径了(注意,windows的路径是\隔开,需要转义。对转义符,看官看以前讲座)
>>> for line in f:
...     print line
...
learn python

http://hiekay.github.io

>>>

创建文件

上面的实验中,打开的是一个已经存在的文件。如何创建文件呢?

>>> nf = open("m2.txt","w")
>>> nf.write("This is a file")

这次我们同样是用open()这个函数,但是多了个"w",这是在告诉python用什么样的模式打开文件。也就是说,用open()打开文件,可以有不同的模式打开。看下表:

模式 描述
r 以读方式打开文件,可读取文件信息。
w 以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容
a 以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建
r+ 以读写方式打开文件,可对文件进行读和写操作。
w+ 消除文件内容,然后以读写方式打开文件。
a+ 以读写方式打开文件,并把文件指针移到文件尾。
b 以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

从表中不难看出,不同模式下打开文件,可以进行相关的读写。那么,如果什么模式都不写,像前面那样呢?那样就是默认为r模式,只读的方式打开文件。

>>> f = open("m1.txt")
>>> f
<open file 'm1.txt', mode 'r' at 0xb7530230>
>>> f = open("m1.txt","r")
>>> f
<open file 'm1.txt', mode 'r' at 0xb750a700>

可以用这种方式查看当前打开的文件是采用什么模式的,上面显示,两种模式是一样的效果。下面逐个对各种模式进行解释

"w":以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容

m2.txt这个文件是存在的,前面建立的,并且在里面写了一句话:This is a file

>>> fp = open("m2.txt")
>>> for line in fp:         #原来这个文件里面的内容
...     print line
...
This is a file
>>> fp = open("m2.txt","w")    #这时候再看看这个文件,里面还有什么呢?是不是空了呢?
>>> fp.write("My name is hiekay.\nMy website is hiekay.github.io")  #再查看内容
>>> fp.close()

查看文件内容:

$ cat m2.txt  #cat是linux下显示文件内容的命令,这里就是要显示m2.txt内容
My name is hiekay.
My website is hiekay.github.io

"a":以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建

>>> fp = open("m2.txt","a")
>>> fp.write("\nAha,I like program\n")    #向文件中追加
>>> fp.close()                            #这是关闭文件,一定要养成一个习惯,写完内容之后就关闭

查看文件内容:

$ cat m2.txt
My name is hiekay.
My website is hiekay.github.io
Aha,I like program

目录
相关文章
|
7月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
1653 2
|
6月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1088 68
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
12月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
537 69
|
8月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
258 0
|
9月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
9月前
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
10月前
|
编解码 Prometheus Java
当Python同时操作1000个文件时,为什么你的CPU只用了10%?
本文介绍如何构建一个高效的文件处理系统,解决单线程效率低、多线程易崩溃的矛盾。通过异步队列与多线程池结合,实现任务调度优化,提升I/O密集型操作的性能。
225 4
|
9月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
2176 0
|
10月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
349 5

推荐镜像

更多