Crossin的编程教室
标题: 【Python 第31课】 读文件 [打印本页]
作者: crossin先生 时间: 2014-4-24 18:36
标题: 【Python 第31课】 读文件
之前,我们写的程序绝大多数都依赖于从命令行输入。假如某个程序需要输入很多数据,比如一次考试的全班学生成绩,再这么输就略显痛苦了。一个常见的办法就是把学生的成绩都保存在一个文件中,然后让程序自己从这个文件里取数据。
要读取文件,先得有文件。我们新建个文件,就叫它data.txt。在里面随便写上一些话,保存。把这个文件放在接下来你打算保存代码的文件夹下,这么做是为了方便我们的程序找到它。准备工作就绪,可以来写我们的代码了。
打开一个文件的命令很简单:
file('文件名')
这里的文件名可以用文件的完整路径,也可以是相对路径。因为我们把要读取的文件和代码放在了同一个文件夹下,所以只需要写它的文件名就够了。
f = file('data.txt')
但这一步只是打开了一个文件,并没有得到其中的内容。变量f保存了这个文件,还需要去读取它的内容。你可以通过read()函数把文件内所有内容读进一个字符串中。
data = f.read()
做完对文件的操作之后,记得用close()关闭文件,释放资源。虽然现在这样一个很短的程序,不做这一步也不会影响运行结果。但养成好习惯,可以避免以后发生莫名的错误。
完整程序示例:
f = file('data.txt')
data = f.read()
print data
f.close()
是不是很简单?
读取文件内容的方法还有
readline() #读取一行内容
readlines() #把内容按行读取至一个list中
去替换程序的第二行,看看它们的区别。
作者: 萧风 时间: 2014-7-1 14:05
这个分别是用readline()和readlines()方法读的文件,为什么readlinrs()读的中文是这样子的?
作者: crossin先生 时间: 2014-7-2 11:11
萧风 发表于 2014-7-1 14:05
这个分别是用readline()和readlines()方法读的文件,为什么readlinrs()读的中文是这样子的?
readlines是把整个文件按行读进一个list,每行是list中的一项
list在被直接print的时候不会对其中的字符进行解码
作者: 萧风 时间: 2014-7-2 12:29
crossin先生 发表于 2014-7-2 11:11
readlines是把整个文件按行读进一个list,每行是list中的一项
list在被直接print的时候不会对其中的字符 ...
那有解码的方式吗?
作者: crossin先生 时间: 2014-7-3 14:43
萧风 发表于 2014-7-2 12:29
那有解码的方式吗?
你用for循环把其中每一项拿出来单独print就可以了
作者: zzxomg 时间: 2015-3-14 13:49
- #coding:utf-8
- #文件操作
- f = file('data.txt')
- #con = f.read()
- #con = f.readline()
- con = f.readlines()
- for i in con :
- print i,
- f.close()
复制代码
作者: lovia 时间: 2015-5-28 00:13
正则表达式学完我感觉我就可以出自己的计算书了
作者: 460883323 时间: 2015-12-8 22:46
本帖最后由 460883323 于 2015-12-8 22:48 编辑
为啥我把上面代码复制到pyscripter里面,程序py文件和txt都是同个文件夹,总会提示:errno 2 no such file or directory
win10 x64,放到文件夹下面或者py文件和txt放到C盘根目录下都会报错
作者: 460883323 时间: 2015-12-9 12:12
460883323 发表于 2015-12-8 22:46
为啥我把上面代码复制到pyscripter里面,程序py文件和txt都是同个文件夹,总会提示:errno 2 no such file ...
搞定了。。。原来是保存txt的时候,因为没有开启文件后缀名多写了个.txt上去。。。。问题已解决
作者: catherinemic 时间: 2016-1-2 15:39
- f=file('data.txt')
- data2=f.read()
- print data2
- data1=f.readline()
- print data1
- data3=f.readlines()
- for i in data3:
- print i
- f.close()
- crossin老师,为什么这样写,最后输出的结果只有data2,而后面两个没有输出?
复制代码
-
Python16.png
(4.12 KB, 下载次数: 709)
作者: crossin先生 时间: 2016-1-2 23:52
catherinemic 发表于 2016-1-2 15:39
文件被打开来,有个类似指针的东西,指向文件中的位置,read过一次之后,这个指针就指向文件末尾了,再读就读不出内容了。要重新打开文件,或者把指针重置到文件头f.seek(0)
作者: catherinemic 时间: 2016-1-3 11:37
crossin先生 发表于 2016-1-2 23:52
文件被打开来,有个类似指针的东西,指向文件中的位置,read过一次之后,这个指针就指向文件末尾了,再读 ...
明白了,谢谢crossin老师!
作者: 那夏日 时间: 2016-1-19 10:52
图挂了.....
作者: crossin先生 时间: 2016-1-19 20:55
那夏日 发表于 2016-1-19 10:52
图挂了.....
已修复
作者: 那夏日 时间: 2016-1-20 09:54
crossin先生 发表于 2016-1-19 20:55
已修复
哇 非常感谢
作者: mengnanlong 时间: 2016-4-11 15:32
Crossin老师,请问一下,怎么读取xls这类的表格文件啊?除了下载xlrd之外还要下什么模块吗?具体的语法我也不会,老师能不能教一下啊?谢谢~~
作者: crossin先生 时间: 2016-4-11 21:00
mengnanlong 发表于 2016-4-11 15:32
Crossin老师,请问一下,怎么读取xls这类的表格文件啊?除了下载xlrd之外还要下什么模块吗?具体的语法我也 ...
这个我没有做过,一般要做都是去搜下相关的文章,然后看对应的文档里,提供了哪些可用的函数。
以后会考虑挑一些模块来讲
作者: mengnanlong 时间: 2016-4-19 14:52
十分感谢,crossin老师
作者: 追风 时间: 2016-5-5 13:20
老师,文件的类型只能是txt吗?
作者: crossin先生 时间: 2016-5-6 10:54
追风 发表于 2016-5-5 13:20
老师,文件的类型只能是txt吗?
不是,不限制
作者: luolangsaint 时间: 2016-11-26 16:15
老师好,win10系统,Python 3.52,这个代码怎么报错呢。
f = file('data.txt')
data = f.read()
print (data)
f.close()
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/python/file.py", line 1, in <module>
f = file('data.txt')
NameError: name 'file' is not defined
作者: luolangsaint 时间: 2016-11-26 17:21
luolangsaint 发表于 2016-11-26 16:15
老师好,win10系统,Python 3.52,这个代码怎么报错呢。
f = file('data.txt')
data = f.read()
在一个同学的帮助下解决了,不用麻烦老师了,把file改为open 就可以了
作者: crossin先生 时间: 2016-11-26 18:07
luolangsaint 发表于 2016-11-26 17:21
在一个同学的帮助下解决了,不用麻烦老师了,把file改为open 就可以了
嗯
3里面已经没有file了
作者: l0ve1o24 时间: 2016-12-9 17:52
老师,readline(),提出来的是第一行,想提第二行应该怎么打,在括号里打2,好像是提出2个字符
作者: crossin先生 时间: 2016-12-9 22:29
l0ve1o24 发表于 2016-12-9 17:52
老师,readline(),提出来的是第一行,想提第二行应该怎么打,在括号里打2,好像是提出2个字符 ...
再执行一次 readline()
每执行一次,向后读一行
作者: l0ve1o24 时间: 2016-12-10 13:57
crossin先生 发表于 2016-12-9 22:29
再执行一次 readline()
每执行一次,向后读一行
原来如此
作者: sp627976612 时间: 2017-2-23 20:57
460883323 发表于 2015-12-9 12:12
搞定了。。。原来是保存txt的时候,因为没有开启文件后缀名多写了个.txt上去。。。。问题已解决 ...
你怎么解决的啊,我也遇到这个问题了,你的回复我没看懂.
作者: crossin先生 时间: 2017-2-24 16:55
sp627976612 发表于 2017-2-23 20:57
你怎么解决的啊,我也遇到这个问题了,你的回复我没看懂.
他的意思是,windows会隐藏后缀名。他起了个 data.txt ,实际是 data.txt.txt
解决方法就是自己不要加 txt
作者: surenck 时间: 2017-3-22 22:29
老师,为什么print 输出后会有一个空行,在print后加上,后就正常了。
作者: crossin先生 时间: 2017-3-23 17:32
surenck 发表于 2017-3-22 22:29
老师,为什么print 输出后会有一个空行,在print后加上,后就正常了。
对啊,py2就是这么设定的
作者: 枫叶落时 时间: 2017-8-10 21:53
有人可以为我讲解下这句话吗?data = f.read()
我不懂,为啥是f后面加.raed()基础打得不是很好,求解这句话,越详细越好~,谢谢
作者: crossin先生 时间: 2017-8-10 23:41
枫叶落时 发表于 2017-8-10 21:53
有人可以为我讲解下这句话吗?data = f.read()
我不懂,为啥是f后面加.raed()基础打得不是很好,求解这句 ...
read() 这是个函数,见19课。
f 是个打开的文件对象,f.read() 就是让这个文件去读取内容。
从理论上解释为什么这么写,见后面“面向对象”的内容
作者: crossin先生 时间: 2017-8-10 23:42
枫叶落时 发表于 2017-8-10 21:53
有人可以为我讲解下这句话吗?data = f.read()
我不懂,为啥是f后面加.raed()基础打得不是很好,求解这句 ...
从你今天提的几个问题来看,我建议你不要求快囫囵吞枣,先回头把前面几课的代码自己打出来运行,慢慢理解透彻
作者: 枫叶落时 时间: 2017-8-10 23:47
好的好的,我会回头再看的。重新过一遍题
作者: haoxunzhao 时间: 2017-10-19 08:24
catherinemic 发表于 2016-1-2 15:39
我的也是呀,为什么
作者: woodumpling 时间: 2017-10-19 09:39
haoxunzhao 发表于 2017-10-19 08:24
我的也是呀,为什么
请问是什么问题?
作者: crossin先生 时间: 2017-10-19 20:57
catherinemic 发表于 2016-1-2 15:39
文件有读取位置的,你可以想象成文件里的光标
读完一次到底之后就结束了
要重新读用 seek(0)
作者: 努力的小白 时间: 2017-10-21 22:09
本帖最后由 努力的小白 于 2017-10-21 22:12 编辑
python3和2有好多不同,很多的莫名其妙的,老师有空能出一章详细说明2和3的指令和用法不同吗?
作者: crossin先生 时间: 2017-10-21 23:50
努力的小白 发表于 2017-10-21 22:09
python3和2有好多不同,很多的莫名其妙的,老师有空能出一章详细说明2和3的指令和用法不同吗? ...
写过的,公众号里回复 2v3
作者: lubvi 时间: 2017-10-30 10:55
f = file('data.txt')
data = f.read()
print(data)
f.close()
为啥报错呢C:\Users\wangc\Desktop\微信截图_20171030105303.png
-
微信截图_20171030105303.png
(22.6 KB, 下载次数: 453)
作者: crossin先生 时间: 2017-10-30 11:14
lubvi 发表于 2017-10-30 10:55
f = file('data.txt')
data = f.read()
print(data)
改用 open
作者: crossin先生 时间: 2017-10-30 11:14
lubvi 发表于 2017-10-30 10:55
f = file('data.txt')
data = f.read()
print(data)
py3没有file,改open了
作者: lubvi 时间: 2017-10-30 11:22
crossin先生 发表于 2017-10-30 11:14
py3没有file,改open了
谢谢C老师,刚才也在上面的回复里找到了。 Py3留了好多坑啊
作者: Imagination 时间: 2017-12-3 15:51
file 可以用在python3上吗 为什么我在python3上运行不成功 显示file没有被定义
作者: braid 时间: 2017-12-4 09:27
Imagination 发表于 2017-12-3 15:51
file 可以用在python3上吗 为什么我在python3上运行不成功 显示file没有被定义
file在python3中取消了,你可以使用open()替代
作者: yamika 时间: 2018-3-9 15:34
py3里的是不是没有file这一指令?字体颜色都是黑色
作者: crossin先生 时间: 2018-3-9 18:39
yamika 发表于 2018-3-9 15:34
py3里的是不是没有file这一指令?字体颜色都是黑色
改open了
作者: yamika 时间: 2018-3-9 21:38
crossin先生 发表于 2018-3-9 18:39
改open了
非常感谢楼主回复,看到32课时,也猜想应该用open了。
也感谢楼主的课程分享,很受用,学起来比直接的教程有趣,希望编程教室越办越好!
作者: crossin先生 时间: 2018-3-10 15:00
yamika 发表于 2018-3-9 21:38
非常感谢楼主回复,看到32课时,也猜想应该用open了。
也感谢楼主的课程分享,很受用,学起来比直接的教 ...
谢谢支持
作者: 司南 时间: 2018-4-9 17:10
课堂作业- #读取文件
- #司南 2018.04.09
- f=open('class.txt')
- data=f.read()
- print(data)
- f.seek(0)
- data1=f.readline()
- print(data1)
- f.close
- f=open('class.txt')
- data2=f.readlines()
- print(data2)
- f.close()
复制代码
作者: 落梦 时间: 2019-11-29 00:30
找不到路径!!!!!
f = open('a.txt')
data = f.read()
print(data)
f.close()
----------------------------------------------------------------------------------------------------------------------------------
"C:\Program Files\Python38\python.exe" C:\Users\23593\Desktop\.idea\python练习\读文件.py
Traceback (most recent call last):
File "C:\Users\23593\Desktop\.idea\python练习\读文件.py", line 1, in <module>
f = open('a.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'
作者: crossin先生 时间: 2019-11-29 12:20
落梦 发表于 2019-11-29 00:30
找不到路径!!!!!
f = open('a.txt')
data = f.read()
说明你文件名或者放的位置不对,翻下这个帖子之前的回帖,对你会有参考
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |