习题 15: 读取文件
在文本编辑器中,编辑以下内容并保存到ex15.py文件中,同时在终端中运行该文件:
##-- coding: utf-8 --
#将Python的功能(其实叫模组modules)引入到脚本中
#argv就是所谓的”参数变量“,这个变量包含了你传递给Python的参数
from sys import argv
#将argv中的东西解包,将所有的参数依次赋予左边的变量名,
script, filename = argv
txt = open(filename)
print "Here's you file %r:" % filename
print txt.read()
print "Type the filename again:"
file_again = raw_input(">")
txt_again = open(file_again)
print txt_again.read()
执行结果
$ python ex15.py ex15_sample.txt
Here's you file 'ex15_sample.txt':
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
Type the filename again:
>ex15_sample.txt
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
加分习题
这节的难度跨越有点大,所以你要尽量做好这节加分习题,然后再继续后面的章 节。
- 在每一行的上面用注解说明这一行的用途。
##-- coding: utf-8 --
#将Python的功能(其实叫模组modules)引入到脚本中
#argv就是所谓的”参数变量“,这个变量包含了你传递给Python的参数
from sys import argv
#将argv中的东西解包,将所有的参数依次赋予左边的变量名,
script, filename = argv
#open用于打开一个文件,创建一个 file 对象,之后通过相关的方法才可以调用它进行读写
txt = open(filename)
#输出文件名
print "Here's you file %r:" % filename
#读取文件中的内容并输出
print txt.read()
print "Type the filename again:"
#获取用户输入的文件名
file_again = raw_input(">")
#open用于打开一个文件,创建一个 file 对象,之后通过相关的方法才可以调用它进行读写
txt_again = open(file_again)
#读取文件中的内容并输出
print txt_again.read()
- 如果你不确定答案,就问别人,或者上网搜索。大部分时候,只要搜索 “python” 加上你要搜的东西就能得到你要的答案。比如搜索一下“python open”。
- 我使用了“命令”这个词,不过实际上它们的名字是“函数(function)”和“方法(method)。上网搜索一下这两者的意义和区别。看不明白也没关系,迷失在别的程序员的知识 海洋里是很正常的一件事情。
首先摒弃错误认知:并不是类中的调用都叫方法
看举例看代码
class Foo(object):
def func(self):
pass
#实例化
obj = Foo()
# 执行方式一:调用的func是方法
obj.func() #func 方法
# 执行方式二:调用的func是函数
Foo.func(123) # 函数
是的!例子中很明确,类对象调用func是方法,类调用func是函数,并且是自己传递参数123!
最大的区别是参数的传递参数,方法是自动传参self,函数是主动传参
那么以后我们就可以直接看参数是如何传递的来判断
如果还不确定可以打印类型看看
from types import FunctionType,MethodType
print(isinstance(obj.func,MethodType)) ---># True
print(isinstance(Foo.func,FunctionType)) ---># True
参考博客:https://www.cnblogs.com/zzy-9318/p/9192802.html
- 删掉 10-15 行使用到 raw_input 的部分,再运行一遍脚本。
- 只是用 raw_input 写这个脚本,想想那种得到文件名称的方法更好,以及为什么。
- 运行 pydoc file 向下滚动直到看见 read() 命令(函数/方法)。看到很多别的
命令了吧,你可以找几条试试看。不需要看那些包含 __ (两个下划线)的命令,
这些只是垃圾而已。
read(...)
| read([size]) -> read at most size bytes, returned as a string.
|
| If the size argument is negative or omitted, read until EOF is reached.
| Notice that when in non-blocking mode, less data than what was requested
| may be returned, even if no size parameter was given.
|
| readinto(...)
| readinto() -> Undocumented. Don't use this; it may go away.
|
| readline(...)
| readline([size]) -> next line from the file, as a string.
|
| Retain newline. A non-negative size argument limits the maximum
| number of bytes to return (an incomplete line may be returned then).
| Return an empty string at EOF.
|
| readlines(...)
| readlines([size]) -> list of strings, each a line from the file.
|
| Call readline() repeatedly and return a list of the lines so read.
| The optional size argument, if given, is an approximate bound on the
| total number of bytes in the lines returned.
- 再次运行 python 在命令行下使用 open 打开一个文件,这种 open 和 read 的方法也值得你一学。
>>> txt = open("ex15_sample.txt",'rt')
>>> print txt.read()
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
- 让你的脚本针对 txt and txt_again 变量执行一下 close() ,处理完文件后你
需要将其关闭,这是很重要的一点。
txt.close()
txt_again.close()