9.1 比较简单 看每一行开头是不是# 是的话,忽略这一行
#!/usr/bin/env python
import os
while True:
inputfile = raw_input("please input the file name:")
if not os.path.exists(inputfile):
print "the file you input dose't exists"
continue
print "the name you input does not exists"
f1 = open(inputfile, 'r')
for each_line in f1:
if not each_line.strip().startswith('#'):
print each_line
f1.close()
9.2 设一个标记=0, 每打印一行,标记+1
#!/usr/bin/env python
import os
infile = raw_input("please input n(n lins) f(file you want to read n lines):")
n, filein = infile.split()
n = int(n)
print n
print filein
if not os.path.isfile(filein):
print "the file you input does not exists"
f1 = open(filein, 'r')
line = 0
for each_line in f1:
if line < n:
print each_line,
line += 1
else:
break
f1.close()
9.3 每读一行标记+1,这里发现一个有意思的问题, 如果你最后没有写 f.close() 用这段程序读自己的话,有可能自己的程序没有了
infile = raw_input('please input filename:')
f1 = open(infile)
num = 0
for each_line in f1:
num+=1
print "the file you input has %d lines" % num
f1.close()
看有人给出了一个代码更少的方法
filename = raw_input("please input the filename")
print len( [line for line in open(filename)] )
print [line for line in open(filename)]
虽然内存开销大了一点,但是在文件比较小的情况下可以忽略不计了,
另外发现一个有意思的事 最后一行显示如果是空行的话,有时候我们的显示结果会多一行, 把列表打印出来发现这是最后一行油一个'\n'的缘故
如果有兴趣的话可以加一行判断最后一行是否为空的代码~
9.4 windows上比较简单 直接os.sys('pause')
linux 别人博客上搜到的不太好用,那位大牛解决了望告知
9.5
不能理解那个打开多个文件~
这里简单的实现一个,创建一个随机的五位到十位的姓名,一个20到一百的随机数
并且用了两种方法来计算平均数 一种正常的打开文件,一行一行读,然后另一个用了列表解析
开始的时候一直平均数不同
列表解析这样写的(int (score) for line in f1, for score in line.split()[1])
这样的结果是把一个两位数也给分解了~ 最后打印出来是一堆各位数.....
这样写就好 (int (line.split()[1]) for line in f1)
#!/usr/bin/env python
import random
import string
srstring = string.letters;
f1 = open('source.txt', 'w')
for i in range(0, 10):
name = ''
length = random.randint(5,10)
for j in range(length):
name += random.choice(srstring)
score = random.randint(20, 100)
score = str(score)
outstring = name + ' ' +score + '\n'
f1.write(outstring)
f1.close()
f1 = open('source.txt', 'r')
sum1 = 0
n = 0
for each_line in f1:
sum1 += int(each_line.split()[1])
n += 1
print sum1, sum1/n
f1.seek(0)
print sum(int(line.split()[1]) for line in f1)
f1.close()