这一段效果和下面这个代码块是一样的。
temp = []
for line in f:
for word in line.split():
temp.append(word)
print len(temp)
我不知道你是在什么地方看到这样的例子的,但你没必要再看了。把简单的东西复杂化一点也不高大上。而且这段代码也实现不了求文本中非空白字符数目的功能。line=' hello'或者'hello '或者'he llo'这三种情况都得不到正确结果。
就是那本python核心编程里面。。。。我还有个问题就是forlineinf的这个句子得到的line似乎是每一个字符是么?比如f='helloword'这样得到的line是'h','e','l'这样一个一个的字符?我试了一下好像是这样的诶。那这样的话,下面的line,split()怎么继续呢?这里我也不是太明白。。
f=open('123.txt')
source=f.readlines()
forlineinsource:
line表示文件中的一行,你编辑文件时每敲一次回车就换一次行,换行字符是'n',
f.readlines()就是把文件对象f中的所有行读取到一个列表里。
比如文件123.txt的内容是:
helloworld!
what'syourname?
thankyou.
那么通过f.readlines()会返回列表['helloworld!n','what'syourname?n','thankyou.n'],列表里的项就是你说的line。
forlineinf:
本身的字面意思就是从一个文件对象(f)里读取每一行(line),写代码的时候要让代码的字面意思和实际作用相符合。如果f='helloworld',那就应该这样写:
forcharacterinf:
表示依次遍历字符串对象的每一个字符(character)。
这样的代码风格叫做codingastalking。
我的意思是这样的,就是line在这里面只是我自己命名的一个变量,然后我用
forlineinf:
printline
这样去写,得到的却是一个个字符,每一个字符都换行了。这里我想问的是,系统按照这样去写得到的不应该也一样是一个个字符而不是一行一行的么?
你在123.txt添加如下内容:
helloworld!
然后f=open('123.txt'),f是一个文件对象,并不是你认为的f='helloworld!'。首先你要明白这一点。
forlineinf:是对文件对象f进行遍历,每次返回一个以'n'结尾的字符串,也即文件里的一行。
如果你直接对f进行赋值f='helloworld!',那f是一个字符串,对它进行遍历就是依次返回单个字符,跟换行没有任何关系。