文件读写
file_obj=open(filename,mode='r',buffering=-1)
#其中mode为可选参数,默认值为r
#buffering为可选参数,默认值为-1
#(0代表不缓冲,>=1的值表示缓冲一行或指定缓冲区的大小)
#可以以文本文件方式或二进制文件方式打开
#open()函数返回一个文件(file)对象,文件对象可迭代
将文件中的字符串读出,加上序号然后写进去。
f = open(r'D:\program\python\nju_python\firstpro.txt','r')
line = f.readlines()
#此处line的数据类型是list
for i in range(0,len(line)):
line[i]=str(i+1)+'.'+line[i]
f.close()
f1 = open(r'D:\program\python\nju_python\firstpro.txt','w')
#这里用write()函数就不行,因为其只接受str参数
f1.writelines(line)
f1.close()
小程序
#创建文件并写入歌词
f = open (r'D:\program\python\nju_python\Blowing in the wind.txt','w')
f.write('How many roads must a man walk down\nBefore they call him a man\n\
How many seas must a white dove sail\nBefore she sleeps in the sand\n\
How many times must the cannon balls fly\nBefore they\'re forever banned\n\
The answer my friend is blowing in the wind\nThe answer is blowing in the wind\n')
f.close()
#插入歌名
f1 = open (r'D:\program\python\nju_python\Blowing in the wind.txt','r+')
sname='Blowin’ in the wind\n'
#print(f1.read())
s=sname+f1.read()
#print(s)
#前面read()完之后文件指针在文件末尾,记得seek回来
f1.seek(0,0)
f1.write(s)
f1.close()
#插入歌手及创作年份等
f2 = open (r'D:\program\python\nju_python\Blowing in the wind.txt','r+')
content = f2.read()
content_add = 'Bob Dylan'
pos = content.find('\nHow many roads must a man walk down')
if pos!=-1:
content = content[:pos] + '-'+content_add + content[pos:]
f2.seek(0,0)
f2.write(content)
f2.seek(0,2)
f2.write('1962 by Warner Bros. Inc.')
f2.seek(0,0)
print(f2.read())
f2.close()
从网络获取数据
import urllib.request
r = urllib.request.urlopen("https://www.baidu.com/")
html = r.read()
print(html)
对象身份比较:
在 python2中,<>表示!=的意思,在python中已不再支持<>。
序列:字符串、列表、元组
>>> week=['MON','TUE','WED','THU','FRI','SAT','SUN']
>>> print(week[::-3])
['SUN', 'THU', 'MON']
>>> print(week[::-2])
['SUN', 'FRI', 'WED', 'MON']
>>> print(week[::-1])
['SUN', 'SAT', 'FRI', 'THU', 'WED', 'TUE', 'MON']
aStr = 'What do you think of this saying "No pain,No gain"?'
#lindex = aStr.index('\"',0,len(aStr))
#rindex = aStr.rindex('\"',0,len(aStr))
#tempStr = aStr[lindex+1:rindex]
#上面三句可由下面一句代替
#表示用"将字符串分为三部分,我们需要第二部分,即下标为1的部分
tempstr = aStr.split('\"')[1]
if tempstr.istitle():
print('It is title format.')
else:
print('It is not title format.')
print(tempstr.title())
列表
同一个列表中可以包含不同的数据类型。
列表是可变的。
eg b = [1,2,'p',3.5] #包涵整形、字符串和实型
week = ['MON','TUE','WED','THU','FRI']
weekend = ['SAT','SUN']
week.extend(weekend)
#enumerate()序号默认从0开始
for i,j in enumerate(week):
print(i+1,j)
输出:
1 MON
2 TUE
3 WED
4 THU
5 FRI
6 SAT
7 SUN
元组
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0: -1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numbers[0::3]
[1, 4, 7, 10]
>>> numbers[-2:]
[9, 10]
>>> numbers[0: 2]
[1, 2]
编程题
第一题
统计字符串中各个字母出现次数,不区分大小写:
#法一:
def countchar(str):
charmap=[]
#初始化
#只有添加进去元素之后才能用下标访问
#不能通过下标添加元素
for i in range(26):
charmap.append(0)
str=str.upper()
for c in str:
if c.isalpha():
charmap[ord(c)-65]+=1
return charmap
if __name__ == "__main__":
str = input()
print(countchar(str))
#法二:
def countchar(str):
#字典
charmap={}
#初始化
#chr(i)函数表示返回整数i对应的ASCII字符。与ord()作用相反
#参数i是取值范围[0, 255]之间的正数
for i in range(26):
charmap[chr(i+65)]=0
str=str.upper()
for c in str:
if ord('A')<=ord(c)<=ord('Z'):
charmap[c]+=1
return [charmap[chr(i+65)] for i in range(26)]
if __name__ == "__main__":
str = input()
print(countchar(str))
第二题
获取多个网页内容并打印在文件里
import urllib.request
for i in range(0,10):
aStr=str(i)
print(aStr)
url_str='http://tieba.baidu.com/p/100000000'+aStr
r = urllib.request.urlopen(url_str)
html = r.read()
url_str=r'D:\program\python\nju_python\100000000'+aStr+'.html'
f = open(url_str,'w')
f.write(html)
#遇到很神奇的错误,不能解决,把错误贴在下面