python文件操作与正则表达式综合练习
问题:读取从网页中国城市大全保存到本地的html文件,从文件中提取中国城市名称并写入新创建的csv文件中,要求csv文件中每个单元格为一个城市。源文件已提供
第一步我们打开网页文件https://download.csdn.net/download/cpluspluszz/91337643就会的到
我们右键页面点击‘’查看网页源代码‘’可以看见源代码
我们可以右击可以把代码保存到本地,开始用代码完成任务
先导入re正则表达式库
import re
打开html文件与我们将要把城市写入的文件f2,“w”表示本地有该名称的文件就覆盖写,没有就创建写
f1=open('中国城市名称大全.html','r',encoding="UTF-8")
f2=open('城市大全.csv','w')
读取HTML文件中的所有内容在f中,声明一个列表ls用于存取我们获取的城市字符串,利用正则表达式中findall()函数提取字符串,我们可以在文件中的城市处观察到字符格式,参数为'<div class="para" label-module="para">(.+)</div>'表示匹配<div class="para" label-module="para">开头,中间任意字符至少一个,到后面</div>的格式。
f=f1.read()
ls=[]
ls=re.findall('<div class="para" label-module="para">(.+)</div>',f)
打印ls我们会发现某些城市后面会有</div>,例如
平顶山市 卫辉市 辉县市 舞钢市 新密市 孟州市 沁阳市 郏县</div>,我们需要字符串切割
ls[8]=ls[8][:-4]
我们的任务是把字符串写入csv文件中,写入csv的字符串要字符后面有逗号,我们用正则表达式sub函数替换掉原字符串中空格为,并复制给原列表,如果只是进行line =re.sub(' ',',',line),是没有对原字符串数组操作的,这个就差将字符串写入csv文件中了
num=0
for line in ls:ls[num]=re.sub(' ',',',line)num+=1
遍历每个列表的每个元素,用文件操作函数write一个一个将元素写入csv文件,这里换行符可加可不加,最后的完成任务。
for x in ls:f2.write(x+'\n')
f1.close()
f2.close()
完整代码
import re
f1=open('中国城市名称大全.html','r',encoding="UTF-8")
f2=open('城市大全.csv','w')
f=f1.read()
ls=[]
ls=re.findall('<div class="para" label-module="para">(.+)</div>',f)
ls[8]=ls[8][:-4]
num=0
for line in ls:ls[num]=re.sub(' ',',',line)num+=1
for x in ls:f2.write(x+'\n')
f1.close()
f2.close()