Python爬虫入门 文件基本操作概况
1. 创作背景
由于最近在入门爬虫,接触到了很多地方需要掌握到对于文件的熟悉以及操作,所以我就通过网络平台总结了一些常用的文件基本用法及操作,并且一一在Python3.6.4的环境基础下进行了逐一实例实现,把总结下来的经验与成果·拿在这里和大家一起分享,为同学Python爬虫的同志添砖加瓦。
1.1 IO编程介绍
- IO在计算机中是指input/output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的核心来执行,涉及到数据交换的地方,通常是磁盘,网络等,这里就需要IO接口。
通常,程序完成IO操作会有input和output两个数据流。在IO编程中stream是一个很重要的概念,顾名思义stream就是一根里面由水流流过的水管,数据就是里面的水,但是只可以单向流动。 - 另外一个值得注意的问题就是CPU和内存的速度远远高于外设的速度,因此在IO编程中存在速度严重不匹配的问题。为了解决这个问题,有两种方法:同步IO和异步IO。下面讲的主要是同步IO。异步复杂度较高。
2.1 文件读取
Grammar:open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
参数说明:一般我们会用到以下三个参数:
- file 文件路径,以字符串输入;
- mode文件打开模式,详见预备知识,以字符串输入;
- encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk。
- 返回值说明:open()函数返回一个文件对象。
Introduction:close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作,否则会触发ValueError错误。close()方法允许调用多次。
Notice:当file对象,被引用到操作另外一个文件时,Python会自动关闭之前的file对象。 使用close()方法关闭文件是一个好的习惯。
读取操作练习的代码实现如下:
# 读取文件内容
try:
f = open('D:\Richard_exercise.txt', 'r') # 原路径
print (f.read())
finally:
if f:
f.close()
with open('.\Richard_exercise.txt', 'r') as fileReader:
for line in fileReader.readlines():
print (line.strip())
-
读文件,文件对象的read(),readline(),readlines()方法
-
f.read([size]): size为读取的长度,以byte为单位;
-
f.readline([size]): 读一行,如果定义了size,有可能返回的只是一行的一部分;
-
f.readlines(): 把文件每一行作为一个列表的一个成员,并返回这个列表。它的内部是通过循环调用readline()来实现的。
Notice:注意打开文件时要给文件对象读的权限。
2.2 文件的写入
写入操作练习的代码实现如下:
# 文件的写入练习
f = open('.\Richard_exercise.txt', 'w')
f.write('I love Weiwei')
f.flush()
n = input('输入回车')
f.close()
with open('.\Richard_exercise.txt', 'w') as fileWriter:
fileWriter.write("I only love Weiwei")
fileWriter.flush()
n = input('键入回车')
fileWriter.close()
- 写文件,文件对象的write(),writelines()方法
- f.write(str): str是一个字符串,存放你要写入的内容;
- f.writelines(sequence): sequence是一个序列,比如列表,它会迭代帮你写入文件。
# coding=utf-8
f = open('D:\example.txt','w')
# 将写入属性“w”改为属性“a”,表示循环写入
list = ['frog',' ','cat',' ','dog']
f.writelines(list)
f.close()
Explanation:上述代码可以将list中的元素写入D盘下的example.txt文件,文件中会出现如下内容:frog cat dog。
注意:writelines()方法不会为每一个元素自动添加换行。
3.1 os 模块的练习使用
os 模块的操作练习使用代码实现如下:
# os 模块的练习使用
import os
direction_path = os.getcwd() # 获取当前python脚本工作的目录路径
print(direction_path)
file_direction = os.listdir("d:\\") # 返回所有文件名和目录名
print(file_direction)
os.remove(r"F:\Richard_exercise_remove.txt") # 删除一个文件,其中'r'为·防止转义字符
os.removedirs(r"E:\new_build") # 删除多个空目录
print(os.path.isfile(r".\Richard_exercise")) # 路径是否为文件
print(os.path.isdir(r".\Richard_exercise")) # 路径是否为目录
print(os.path.isabs(r".\Richard_exercise")) # 判断绝对路径
print(os.path.exists(r".\Richard_exercise.txt")) # 判断路径是否存在
print(os.path.split(r".\Richard_exercise.txt")) # 分离路径和文件名
print(os.path.splitext(r".\Richard_exercise.txt")) # 分离拓展名
print(os.path.dirname(r"F:\Computer\Computer_Python\File_operation_exercise\Richard_exercise")) # 获取路径名
print(os.path.basename(r"F:\Computer\Computer_Python\File_operation_exercise\Richard_exercise")) # 获取文件名
os.getenv() && os.putenv() # 分别为读取和设置环境变量,有机会举几个例子
os.linesep # 平台的行终止符 Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
print(os.name) # 指示出正在使用的平台,Windows是‘nt’而Linux/Unix是‘posix’
os.rename(".\Richard_exercise.txt", ".\Richard_new_exercise.txt") # 重命名文件或者目录
os.makedirs(r".\Richard_exercise") # 创建多级目录(文件夹)
os.mkdir("Richard") # 创建单个目录
print(os.stat(".\Richard_exercise")) # 获取文件属性
os.chmod(path, mode) # 修改文件权限与时间戳
print(os.path.getsize(r".\Richard_new_exercise.txt")) # 获取文件大小
os.rmdir(r"F:\Computer\Computer_Python\Exercise\Richard_exercise") # 删除空目录
3.2 对于shutil模块的运用及练习
shutil 模块的操作练习使用代码实现如下:
# 对于shutil模块的运用及练习
import shutil
shutil.copytree(".\Richard_exercise", (".\Richard_new_exercise")) # 复制文件夹
shutil.copyfile(r".\Richard_new_exercise.txt", r".\Richard_exercise.txt") # 复制文件
shutil.copy(r".\Richard_exercise.txt", r"F:\Computer\Computer_Python\Exercise") # 复制文件,可以指明目标目录
shutil.move(r"Richard_exercise", r"F:\Computer\Computer_Python\Exercise")
shutil.rmtree(r"F:\Computer\Computer_Python\Exercise\remove") # 删除目录不论是否具有内容
总结
做完这些操作练习之后,希望大家对于文件的基本操作能够铭记于心,掌握好语法架构与具体运用到的不同参数的含义及使用,能够做到在没有任何参考资料的情况之下,结合自己所要达到的目的,自己编写出相应的代码程序,并且去实现它,这样的一种能力,才是真正属于你的东西。接下来,你就可以身上扛起这项能力,去敲Python爬虫的门啦,放肆的去探索、去体验吧!