详细讲解Python中的文件I/O操作


Posted in Python onMay 24, 2015

 本章将覆盖所有在Python中使用的基本I/O功能。有关更多函数,请参考标准Python文档。
打印到屏幕上:

产生输出最简单的方法是使用print语句,可以通过用逗号分隔的零个或多个表达式。该函数将传递到一个字符串表达式,并将结果写到标准输出,如下所示:

#!/usr/bin/python

print "Python is really a great language,", "isn't it?";

这将产生结果输出在标准屏幕上,结果如下:

Python is really a great language, isn't it?

读取键盘输入:

Python提供了两个内置的函数来读取一行,从标准输入,默认情况下是来自键盘的文本。这些函数包括:

  •     raw_input
  •     input

raw_input 函数:

raw_input([prompt])函数从标准输入读取一行并返回一个字符串(去掉结尾的换行)。

#!/usr/bin/python

str = raw_input("Enter your input: ");
print "Received input is : ", str

这将提示您输入字符串,它会在屏幕上显示相同的字符串。当输入“Hello Python!”,它的输出是这样的:

Enter your input: Hello Python
Received input is : Hello Python

input函数:

input([prompt]) 函数相当于raw_input,只是它假设输入的是一个有效的Python表达式,并返回计算结果。

#!/usr/bin/python

str = input("Enter your input: ");
print "Received input is : ", str

对所输入这将产生结果如下:

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is : [10, 20, 30, 40]

打开和关闭文件:

到现在为止,已经了解读取和写入标准输入和输出。现在,我们看看如何用实际数据文件。

Python提供了基本的函数和必要在默认情况下对文件进行操作的方法。可以使用一个文件对象file来做大部分文件操作。
open 函数:

想要读取或写入文件,必须使用Python内置的open()函数来打开它。该函数创建一个文件对象,这将用来调用与之关联的其他支持方式。
语法:

file object = open(file_name [, access_mode][, buffering])

下面是参数的详细信息:

  •     file_name: file_name参数是一个字符串值,包含您要访问的文件的名称。
  •     access_mode: access_mode决定了文件必须被打开,即,读,写,追加等的可能值是下表中给定的一个完整的列表的模式。这是可选参数,默认文件存取方式为read (r)。
  •     buffering: 如果缓冲值被设置为0时,没有缓冲将发生。如果该缓冲值是1,行缓冲会在访问一个文件来执行。如果指定的缓冲值为大于1的整数,则缓冲作用将与所指示的缓冲区的大小进行。如果为负,则缓冲区的大小是系统默认(默认行为)。

这里是打开一个文件的不同模式的列表:

详细讲解Python中的文件I/O操作

 file 对象属性:

一旦文件被打开,文件对象可以得到有关该文件的各种信息。

下面是文件对象相关的所有属性的列表:

详细讲解Python中的文件I/O操作

 例子:

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

这将产生以下结果:

Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0

close() 方法:

一个文件对象的close()方法刷新未写入的信息,并关闭该文件的对象,在这之后没有数据内容可以执行写入。

Python自动关闭,当文件的引用对象被重新分配给另外一个文件。它是使用close()方法来关闭文件是一个很好的做法。
语法:

fileObject.close();

例子:

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file
fo.close()

这将产生以下结果:

Name of the file: foo.txt

读取和写入文件:

file对象提供了一组访问方法。我们来看看如何使用read()和write()方法来读取和写入文件。
write() 方法:

write()方法写入字符串到任何一个打开的文件。要注意的是Python字符串可以具有二进制数据,而不仅仅是文字。

write()方法不要将换行字符('\n')添加到字符串的结尾:
语法:

fileObject.write(string);

这里,传递的参数是要写入到打开的文件的内容。
例子

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n");

# Close opend file
fo.close()

上面的方法会创建 foo.txt 文件,并会将给定的内容写在该文件中,并最终将关闭该文件。

Python is a great language.
Yeah its great!!

read() 方法:

read()方法读取一个打开的文件的字符串。要注意的是Python字符串可以具有二进制数据,而不仅仅是文本。
语法

fileObject.read([count]);

这里,传递的参数是从打开的文件中读出的字节数。此方法从该文件的开头读取,如果计数丢失,那么它会尝试尽可能多地读取,直到文件的末尾。
例子:

这里以一个文件foo.txt作为例子,这是在上面创建的。

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

这将产生以下结果:

Read String is : Python is

文件位置:

tell()方法告诉该文件中的当前位置;换句话说,下一个读取或写入将发生在从该文件的开头的字节数。

seek(offset[, from]) 方法会更改当前的文件位置。偏移参数指示要移动的字节数。从该参数指定字节将被移至参考点。

如果from被设置为0,这意味着使用该文件的开始处作为基准位置,设置为1则是使用当前位置作为基准位置,如果它被设置为2,则该文件的末尾将被作为基准位置。
例子

让我们以一个文件foo.txt,这是上面创建。

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str

# Check current position
position = fo.tell();
print "Current file position : ", position

# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10);
print "Again read String is : ", str
# Close opend file
fo.close()

这将产生以下结果:

Read String is : Python is
Current file position : 10
Again read String is : Python is

重命名和删除文件:

Python的os模块提供了一些方法,可以帮助执行文件处理操作,如重命名和删除文件。

要使用这个模块,需要先导入它,然后调用相关的功能。
rename() 方法:

rename()方法有两个参数,当前文件名和新文件名。
语法:

os.rename(current_file_name, new_file_name)

例子

以下是例子来重命名文件test1.txt:

#!/usr/bin/python
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

remove() 方法:

可以使用remove()方法通过提供参数作为文件名称作为要删除的文件。
语法:

os.remove(file_name)

例子

以下为示例删除现有文件test2.txt:

#!/usr/bin/python
import os

# Delete file test2.txt
os.remove("text2.txt")

Python中的目录:

所有的文件都包含不同的目录中,而在Python中处理这些没有问题。os模块有几种方法,可以帮助创建,删除和更改目录。
mkdir() 方法:

可以使用os模块的mkdir()方法在当前目录下创建目录。需要提供参数,这个方法包含的目录要创建的名称。
语法:

os.mkdir("newdir")

例子:

以下为示例在当前目录下创建test目录如下所示:

#!/usr/bin/python
import os

# Create a directory "test"
os.mkdir("test")

chdir() 方法:

可以使用chdir()方法来改变当前目录。chdir()方法接受一个参数,那就是要成为当前目录的目录的名称。
语法:

os.chdir("newdir")

例子:

下面是一个进入“/home/newdir”目录的例子:

#!/usr/bin/python
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

getcwd() 方法:

getcwd()方法显示当前的工作目录。
例子:

os.getcwd()

例子:

以下是例子给定为当前目录:

#!/usr/bin/python
import os

# This would give location of the current directory
os.getcwd()

rmdir() 方法:

rmdir()命令方法删除目录,它是通过方法的参数。

在删除一个目录,它的所有内容应该被删除。
语法:

os.rmdir('dirname')

例子

下面是一个例子删除“/tmp/test”目录。它是必需的,得到的目录完全的名称,否则将搜索在当前目录中的目录。

#!/usr/bin/python
import os

# This would remove "/tmp/test" directory.
os.rmdir( "/tmp/test" )
Python 相关文章推荐
Python基于动态规划算法计算单词距离
Jul 25 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
分析python切片原理和方法
Dec 19 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
Python数据类型之Dict字典实例详解
May 07 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
matplotlib阶梯图的实现(step())
Mar 02 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
详解在Python中处理异常的教程
May 24 #Python
Python中关于使用模块的基础知识
May 24 #Python
详解Python中的各种函数的使用
May 24 #Python
Python标准库之Sys模块使用详解
May 23 #Python
Python OS模块常用函数说明
May 23 #Python
在Python中操作时间之tzset()方法的使用教程
May 22 #Python
详解Python中time()方法的使用的教程
May 22 #Python
You might like
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python中__call__用法实例
2014/08/29 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python之用户输入的实例
2018/06/22 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
python迭代器常见用法实例分析
2019/11/22 Python
简单了解python元组tuple相关原理
2019/12/02 Python
python如何实现单链表的反转
2020/02/10 Python
python输出pdf文档的实例
2020/02/13 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
药品促销活动方案
2014/02/14 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
八月迷情观后感
2015/06/11 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android