首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python2.7为什么我只写了一行列表文件而不是整个列表

Python2.7为什么我只写了一行列表文件而不是整个列表
EN

Stack Overflow用户
提问于 2016-12-21 05:57:52
回答 1查看 43关注 0票数 0

最初,我的代码是:

代码语言:javascript
复制
# encoding = utf-8
from bs4 import BeautifulSoup
import urllib
import re
import os

url = []
urlbase = "https://quizlet.com/subject/四级乱序/page/"
for i in range(0,2):
    url.append(urlbase + str(i+1))
    indexname = str(url[i])[-1] + ".html"
    urllib.urlretrieve(url[i], indexname)
    print indexname + " downloaded"
    f = open(indexname,"r")
    soup = BeautifulSoup(f, "html.parser")
    linkclass = soup.find_all("a", attrs={"class":"SetPreview-link","href":re.compile(r"unit(\s\w+)?")})
    for link in link class:
        flink = link.get("href")
        print flink

结果是一些链接,工作得很好。

,但当我用如下代码将它写入文件时:

代码语言:javascript
复制
# encoding = utf-8
from bs4 import BeautifulSoup
import urllib
import re
import os
url = []
urlbase = "https://quizlet.com/subject/四级乱序/page/"
flinkfile = open("links.txt",'wb')
for i in range(0,2):
    url.append(urlbase + str(i+1))
    indexname = str(url[i])[-1] + ".html" 
    urllib.urlretrieve(url[i], indexname)
    print indexname + " downloaded"
    f = open(indexname,"r")
    soup = BeautifulSoup(f, "html.parser")
    linkclass = soup.find_all("a", attrs={"class":"SetPreview-link", "href":re.compile(r"unit(\s\w+)?")})
    for link in linkclass:
        flink = link.get("href")
        flinkfile.writelines(flink)
    flinkfile.close()

结果是一个只有一行的txt文件:https://quizlet.com/146113318/unit31-flash-cards/

为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 06:17:07

问题是文件关闭在for i in range(0,2)循环中。如果您将其移出,您应该得到更多的行(假设有更多的行):

代码语言:javascript
复制
# encoding = utf-8
from bs4 import BeautifulSoup
import urllib
import re
import os
url = []
urlbase = "https://quizlet.com/subject/四级乱序/page/"
flinkfile = open("links.txt",'wb')
for i in range(0,2):
    url.append(urlbase + str(i+1))
    indexname = str(url[i])[-1] + ".html" 
    urllib.urlretrieve(url[i], indexname)
    print indexname + " downloaded"
    f = open(indexname,"r")
    soup = BeautifulSoup(f, "html.parser")
    linkclass = soup.find_all("a", attrs={"class":"SetPreview-link", "href":re.compile(r"unit(\s\w+)?")})
    for link in linkclass:
        flink = link.get("href")
        flinkfile.writelines(flink)
# close file outside loop
flinkfile.close()

若要确保即使发生错误也关闭文件,请使用with语句:

代码语言:javascript
复制
with open(...) as flinkfile:
  for in in range(0,2):
    ...

关于这里的更多信息:http://effbot.org/zone/python-with-statement.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41256083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档