设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 45491|回复: 19
打印 上一主题 下一主题

【Python 第31课】 读文件

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-4-24 18:36:03 |显示全部楼层 |倒序浏览
之前,我们写的程序绝大多数都依赖于从命令行输入。假如某个程序需要输入很多数据,比如一次考试的全班学生成绩,再这么输就略显痛苦了。一个常见的办法就是把学生的成绩都保存在一个文件中,然后让程序自己从这个文件里取数据。

要读取文件,先得有文件。我们新建个文件,就叫它data.txt。在里面随便写上一些话,保存。把这个文件放在接下来你打算保存代码的文件夹下,这么做是为了方便我们的程序找到它。准备工作就绪,可以来写我们的代码了。

打开一个文件的命令很简单:

file('文件名')

这里的文件名可以用文件的完整路径,也可以是相对路径。因为我们把要读取的文件和代码放在了同一个文件夹下,所以只需要写它的文件名就够了。

f = file('data.txt')

但这一步只是打开了一个文件,并没有得到其中的内容。变量f保存了这个文件,还需要去读取它的内容。你可以通过read()函数把文件内所有内容读进一个字符串中。

data = f.read()

做完对文件的操作之后,记得用close()关闭文件,释放资源。虽然现在这样一个很短的程序,不做这一步也不会影响运行结果。但养成好习惯,可以避免以后发生莫名的错误。

完整程序示例:

f = file('data.txt')
data = f.read()
print data
f.close()

是不是很简单?
0.jpeg

读取文件内容的方法还有

readline() #读取一行内容
readlines() #把内容按行读取至一个list中

去替换程序的第二行,看看它们的区别。

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2014-7-2 11:11:11 |显示全部楼层
萧风 发表于 2014-7-1 14:05
这个分别是用readline()和readlines()方法读的文件,为什么readlinrs()读的中文是这样子的?

readlines是把整个文件按行读进一个list,每行是list中的一项
list在被直接print的时候不会对其中的字符进行解码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2014-7-3 14:43:02 |显示全部楼层
萧风 发表于 2014-7-2 12:29
那有解码的方式吗?

你用for循环把其中每一项拿出来单独print就可以了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-1-2 23:52:30 |显示全部楼层
catherinemic 发表于 2016-1-2 15:39

文件被打开来,有个类似指针的东西,指向文件中的位置,read过一次之后,这个指针就指向文件末尾了,再读就读不出内容了。要重新打开文件,或者把指针重置到文件头f.seek(0)
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-1-19 20:55:05 |显示全部楼层
那夏日 发表于 2016-1-19 10:52
图挂了.....

已修复
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2016-4-11 21:00:31 |显示全部楼层
mengnanlong 发表于 2016-4-11 15:32
Crossin老师,请问一下,怎么读取xls这类的表格文件啊?除了下载xlrd之外还要下什么模块吗?具体的语法我也 ...

这个我没有做过,一般要做都是去搜下相关的文章,然后看对应的文档里,提供了哪些可用的函数。
以后会考虑挑一些模块来讲
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-5-6 10:54:52 |显示全部楼层
追风 发表于 2016-5-5 13:20
老师,文件的类型只能是txt吗?

不是,不限制
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2016-11-26 18:07:59 |显示全部楼层
luolangsaint 发表于 2016-11-26 17:21
在一个同学的帮助下解决了,不用麻烦老师了,把file改为open 就可以了


3里面已经没有file了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2016-12-9 22:29:53 |显示全部楼层
l0ve1o24 发表于 2016-12-9 17:52
老师,readline(),提出来的是第一行,想提第二行应该怎么打,在括号里打2,好像是提出2个字符 ...

再执行一次 readline()
每执行一次,向后读一行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2017-2-24 16:55:25 |显示全部楼层
sp627976612 发表于 2017-2-23 20:57
你怎么解决的啊,我也遇到这个问题了,你的回复我没看懂.

他的意思是,windows会隐藏后缀名。他起了个 data.txt ,实际是 data.txt.txt
解决方法就是自己不要加 txt
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-2 17:43 , Processed in 0.020966 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部