文件覆盖在python中

时间:2013-01-16 16:37:26

标签: python file-io

我正在使用python来抓取网页而我正在迭代地进行 - 所以我使用3个html文件来存储网页,但不知怎的,我发现这些文件没有被覆盖,我仍然得到旧文件。这是我正在使用的代码:

def Vals(a,b):
    file1="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html"
    file2="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html"
    file3="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html"

    Query1='"http://scholar.google.com/scholar?q=%22'+a+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL1='wget --user-agent Mozilla '+Query1+' -O '+file1

    Query2='"http://scholar.google.com/scholar?q=%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL2='wget --user-agent Mozilla '+Query2+' -O '+file2

    Query3='"http://scholar.google.com/scholar?q=%22'+a+'%22+%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL3='wget --user-agent Mozilla '+Query3+' -O '+file3
##    print Query1
##    print Query2
##    print Query3
##    
##    print URL1
##    print URL2
##    print URL3


    os.system("wget "+ URL1)
    os.system("wget "+ URL2)
    os.system("wget "+ URL3)

    f1 = open(file1,'r+')
    f2 = open(file2,'r+')
    f3 = open(file3,'r+')

    S1=str(f1.readlines())

    start=S1.find("About")+6
    stop=S1.find("results",start)-1
    try:
        val1=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val1=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html')

    S1=str(f2.readlines())
    #f2.close()
    start=S1.find("About")+6
    stop=S1.find("results",start)-1

    try:
        val2=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val2=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html')

    S1=str(f3.readlines())
    #f3.close()
    start=S1.find("About")+6
    stop=S1.find("results",start)-1
    try:
        val3=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val3=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html')
    f1.truncate()
    f2.truncate()
    f3.truncate()
    f1.close()
    f2.close()
    f3.close()
    return (val1,val2,val3)

任何人都可以判断关闭文件时是否存在错误,或者如何为我的目的关闭它们。

由于

1 个答案:

答案 0 :(得分:0)

您正在使用-O(大写O)选项,该选项将所有内容连接到1个文件。

  

' - O档'   '--output文档=文件

     

文档不会写入相应的文件,但所有文件将连接在一起并写入文件。如果' - '用作文件,文档将打印到标准输出,禁用链接转换。 (使用'./-'打印到名为' - '的文件。)   使用'-O'并不意味着简单地“使用名称文件而不是URL中的文件;”而是类似于shell重定向:wget -O file http://foo旨在像wget -O - http://foo > file一样工作;文件将被立即截断,所有下载的内容都将被写入。

     

因此,'-O'(用于时间戳检查)不支持与'-O'结合使用:因为文件总是新创建的,所以它总是会有一个非常新的时间戳。如果使用此组合,将发出警告。

     

同样,将“-r”或“-p”与“-O”一起使用可能无法正常工作:Wget不会将第一个文件下载到文件中,然后将其余文件下载到正常名称:全部下载内容将被放入文件中。这在版本1.11中已禁用,但已在1.11.2中恢复(带有警告),因为在某些情况下,此行为实际上可以有一些用处。

     

请注意,只有在下载单个文档时才允许与'-k'组合使用,因为在这种情况下,它只会将所有相对URI转换为外部URI; '-k'在多个URI全部下载到单个文件时没有任何意义; '-k'只能在输出为常规文件时使用。

此代码段取自wget's manual

希望这有帮助。