Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换方法确实有效(python2.7)_Python_Replace - Fatal编程技术网

替换方法确实有效(python2.7)

替换方法确实有效(python2.7),python,replace,Python,Replace,我想使用以下代码将页面数据中的“/xxxxx/”等字符串替换为“/xxxxx.html”,但不起作用。页面_数据是由爬虫下载的字节类型 page_data.replace(each, neweach) 仅当我将其更改为: page_data = page_data.replace(each, neweach) 页_数据中的字符串(每个)实际上被替换 整个代码如下: import os import sys import re import urllib import urllib2 cla

我想使用以下代码将页面数据中的“/xxxxx/”等字符串替换为“/xxxxx.html”,但不起作用。页面_数据是由爬虫下载的字节类型

page_data.replace(each, neweach)
仅当我将其更改为:

page_data = page_data.replace(each, neweach)
页_数据中的字符串(每个)实际上被替换

整个代码如下:

import os
import sys
import re
import urllib
import urllib2

class WebGet(object):
    base_url = ""
    urls_list = []
    history_list = []
    replace_ch={}

    def __init__(self, base_url):
        self.base_url = base_url[:-1]
        self.urls_list.append('/')
        self.replace_ch[">>"] = "%3E%3E"
        self.replace_ch["<<"] = "%3C%3C"
        self.replace_ch["::"] = "%3A%3A"

    def recurseGet(self):
        '''Get page data recursively'''
        while(len(self.urls_list) != 0):
            url_suffix = self.urls_list[0]
            self.urls_list.remove(url_suffix)
            self.history_list.append(url_suffix)
            url_to_get = self.base_url + url_suffix

            "Get page data with url"
            print "To get",url_to_get
            page_data = urllib2.urlopen(url_to_get).read()
            page_data_done = self.pageHandle(page_data)

            "Write the page data into file"
            if url_suffix[-1] == '/':
                url_suffix = url_suffix[:-1]
            if url_suffix == '':
                url_suffix = "index"
            elif url_suffix[0] == '/':
                url_suffix = url_suffix[1:]
            url_suffix.replace('/','\\')
            url_suffix.replace('>>','%3E%3E')
            url_suffix.replace('<<','%3C%3C')
            url_suffix.replace('::','%3A%3A')
            file_str = "e:\\reference\\"+url_suffix
            if file_str.rfind("\\") != 12:
                new_dir = file_str[:file_str.rfind("\\")]
                if os.path.isdir(file_str) == False:
                    os.mkdir(file_str)
            file_str = file_str.strip()+".html"
            print "write file",file_str
            f_page = open(file_str, "wb")
            f_page.write(page_data_done)
            f_page.close


    def pageHandle(self, page_data):
        page_data.replace("http://www.cplusplus.com/","/") #here the replace works

        re_rule = '<a href="/reference(/\S{2,40}/)\">'
        list_page_urls = re.findall(re_rule, page_data)
        for each in list_page_urls:
            neweach = each
            neweach = neweach[:-1]+".html"
            #page_data = page_data.replace(each, neweach)
            page_data.replace(each, neweach)
            if each in page_data:
                print "fail replace"
            if each in self.history_list:
                continue
            elif each in self.urls_list:
                continue
            elif each == '/':
                continue                
            self.urls_list.append(each)

        return page_data

def main():
    url = "http://www.cplusplus.com/reference/"
    fc = WebGet(url)
    fc.recurseGet()

if __name__ == "__main__":
    main()
导入操作系统
导入系统
进口稀土
导入URL库
导入urllib2
类WebGet(对象):
base_url=“”
URL_list=[]
历史记录列表=[]
替换_ch={}
定义初始化(自,基本url):
self.base\u url=base\u url[:-1]
self.url\u list.append('/'))
self.replace_ch[“>>”]=%3E%3E

self.replace_ch[“因为
replace
方法就是这样做的:返回字符串的副本,并替换相关字符


除此之外,字符串在Python中是不可变的,因此它无法以任何其他方式工作。

该方法按所述方式工作。。因为
.replace()
返回更改后的字节,并且没有进行适当的更改?我不确定这里的问题是什么,您已经了解了它的工作原理。