设为首页收藏本站

Crossin的编程教室

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

【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
回复

使用道具 举报

1

主题

0

好友

49

积分

新手上路

Rank: 1

沙发
发表于 2014-7-1 14:05:02 |只看该作者
QQ截图20140701140258.png
QQ截图20140701140437.png
这个分别是用readline()和readlines()方法读的文件,为什么readlinrs()读的中文是这样子的?


回复

使用道具 举报

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
回复

使用道具 举报

1

主题

0

好友

49

积分

新手上路

Rank: 1

地板
发表于 2014-7-2 12:29:58 |只看该作者
crossin先生 发表于 2014-7-2 11:11
readlines是把整个文件按行读进一个list,每行是list中的一项
list在被直接print的时候不会对其中的字符 ...

那有解码的方式吗?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2014-7-3 14:43:02 |只看该作者
萧风 发表于 2014-7-2 12:29
那有解码的方式吗?

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

使用道具 举报

0

主题

0

好友

36

积分

新手上路

Rank: 1

6#
发表于 2015-3-14 13:49:59 |只看该作者
  1. #coding:utf-8
  2. #文件操作
  3. f = file('data.txt')
  4. #con = f.read()
  5. #con = f.readline()
  6. con = f.readlines()
  7. for i in con :
  8.                 print i,
  9. f.close()
复制代码
回复

使用道具 举报

0

主题

0

好友

54

积分

注册会员

Rank: 2

7#
发表于 2015-5-28 00:13:24 |只看该作者
正则表达式学完我感觉我就可以出自己的计算书了 hahahhha.png
回复

使用道具 举报

0

主题

0

好友

46

积分

新手上路

Rank: 1

8#
发表于 2015-12-8 22:46:46 |只看该作者
本帖最后由 460883323 于 2015-12-8 22:48 编辑

为啥我把上面代码复制到pyscripter里面,程序py文件和txt都是同个文件夹,总会提示:errno 2 no such file or directory

win10 x64,放到文件夹下面或者py文件和txt放到C盘根目录下都会报错
回复

使用道具 举报

0

主题

0

好友

46

积分

新手上路

Rank: 1

9#
发表于 2015-12-9 12:12:32 |只看该作者
460883323 发表于 2015-12-8 22:46
为啥我把上面代码复制到pyscripter里面,程序py文件和txt都是同个文件夹,总会提示:errno 2 no such file  ...

搞定了。。。原来是保存txt的时候,因为没有开启文件后缀名多写了个.txt上去。。。。问题已解决
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

10#
发表于 2016-1-2 15:39:42 |只看该作者
  1. f=file('data.txt')

  2. data2=f.read()
  3. print data2

  4. data1=f.readline()
  5. print data1

  6. data3=f.readlines()
  7. for i in data3:
  8.     print i

  9. f.close()

  10. crossin老师,为什么这样写,最后输出的结果只有data2,而后面两个没有输出?
复制代码

Python16.png (4.12 KB, 下载次数: 708)

Python16.png

回复

使用道具 举报

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

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

GMT+8, 2024-11-21 23:45 , Processed in 0.029848 second(s), 32 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部