Python文件操作函数详解金沙官网线上

 

相关的API:

#网络爬虫之最基本的爬虫:爬取[网易新闻排行榜](http://news.163.com/rank/)

**一些说明:** 

* 使用urllib2或requests包来爬取页面。

* 使用正则表达式分析一级页面,使用Xpath来分析二级页面。

* 将得到的标题和链接,保存为本地文件。

import os
import sys
import requests
import re

from lxml import etree


def StringListSave(save_path, filename, slist):
    # 检测是否有这个文件目录,不存在的话,会自动创建
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    path = save_path+"/"+filename+".txt"
    with open(path, "w+") as fp:
        for s in slist:
            # 做了utf8转码,转为终端可识别的码制
            fp.write("%stt%sn" % (s[0].encode("utf8").decode('utf-8'), s[1].encode("utf8").decode('utf-8')))


def Page_Info(myPage):
    '''Regex'''
    # 这里的re.findall 返回的是一个元组列表,内容是 (.*?) 中匹配到的内容
    # 析取每个链接的标题和链接
    mypage_Info = re.findall(r'<div class="titleBar" id=".*?"><h2>(.*?)'
                             r'</h2><div class="more"><a href="(.*?)">.*?</a></div></div>', myPage, re.S)
    return mypage_Info

def New_Page_Info(new_page):
    '''Regex(slowly) or Xpath(fast)'''
    # 将new_page的内容转为html格式的树
    dom = etree.HTML(new_page)
    # 析取 <tr <td <a中的文本
    new_items = dom.xpath('//tr/td/a/text()')
    # 析取 <tr <td <a中的链接, @href 是一个属性
    new_urls = dom.xpath('//tr/td/a/@href')
    assert(len(new_items) == len(new_urls))
    return zip(new_items, new_urls)

def Spider(url):
    i = 0
    print("downloading ", url)
    myPage = requests.get(url).content.decode("gbk")
    myPageResults = Page_Info(myPage)
    save_path = "网易新闻抓取"
    filename = str(i)+"_"+"新闻排行榜"
    StringListSave(save_path, filename, myPageResults)
    i += 1
    for item, url in myPageResults:
        print("downloading ", url)
        new_page = requests.get(url).content.decode("gbk")
        newPageResults = New_Page_Info(new_page)
        filename = str(i)+"_"+item
        StringListSave(save_path, filename, newPageResults)
        i += 1


if __name__ == '__main__':
    print("start")
    start_url = "http://news.163.com/rank/"
    Spider(start_url)
    print("end")

文件夹:

 

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()

解析一:检测是否有这个文件目录,不存在的话,会自动创建

返回指定目录下的所有文件和目录名:os.listdir()

import os
save_path = "网易新闻抓取"
if not os.path.exists(save_path):
   os.makedirs(save_path)

函数用来删除一个文件:os.remove()

 

删除多个目录:os.removedirs(r“c:python”)

解析二:os.mkdir 与 os.makedirs 区别及用法:

检验给出的路径是否是一个文件:os.path.isfile()

(1)mkdir( path [,mode] )

检验给出的路径是否是一个目录:os.path.isdir()

      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777。
      如果目录有多级,则创建最后一级。如果最后一级目录的上级目录有不存在的,则会抛出一个OSError。

判断是否是绝对路径:os.path.isabs()

(2)makedirs( path [,mode] )

检验给出的路径是否真地存:os.path.exists()

      作用: 创建递归的目录树,可以是相对或者绝对路径。
      如果子目录创建失败或者已经存在,会抛出一个OSError的异常,Windows上Error      183即为目录已经存在的异常错误。如果path只有一级,与mkdir一样。

返回一个路径的目录名和文件名:os.path.split()

     总结:os.mkdir()创建路径中的最后一级目录;os.makedirs()创建多层目录。

分离扩展名:os.path.splitext()

 

获取路径名:os.path.dirname()

解析三:文件操作,with open as追加文本内容实例:

获取文件名:os.path.basename()

(1) 最常见的读写操作

运行shell命令: os.system()

import re
with open('/rr.txt', 'w') as f:
   f.write('hello world')

读取和设置环境变量:os.getenv() 与os.putenv()

如图所示:

给出当前平台使用的行终止符:os.linesep Windows使用'rn',Linux使用'n'而Mac使用'r'

 金沙官网线上 1

指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

追加写入文件内容:

重命名:os.rename(old, new)

import re
with open('/rr.txt', 'a') as f:
    f.write('hello worldn')
    # print(f.readline(1))

创建多级目录:os.makedirs(r“c:pythontest”)

如图所示:

创建单个目录:os.mkdir(“test”)

 金沙官网线上 2

获取文件属性:os.stat(file)

(2) 一些正则表达式的关键词

修改文件权限与时间戳:os.chmod(file)

 

终止当前进程:os.exit()

w:以写方式打开,

获取文件大小:os.path.getsize(filename)

a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)

文件:

r+:以读写模式打开

fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件

w+:以读写模式打开 (参见 w )

关于open 模式:

a+:以读写模式打开 (参见 a )

w     以写方式打开,
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+     以读写模式打开
w+     以读写模式打开 (参见 w )
a+     以读写模式打开 (参见 a )
rb     以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab     以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+    以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )
fp.read([size]) #size为读取的长度,以byte为单位

本文由金沙官网线上发布于编程,转载请注明出处:Python文件操作函数详解金沙官网线上

您可能还会对下面的文章感兴趣: