**在windows上面,路径的书写使用反斜杠作为文件夹之间的分隔符;在OS X或者Linux上则是是用正斜杠。
python上对文件进行操作要使用到os这个模块。
1.os模块和os.path模块的相关方法。
使用os.path.join()函数,通过给它传递各文件夹的名字,会返回一个文件路径的字符串,并根据使用的不同平台包含正确的路径分隔符。
import os
os.path.join('c:','hello','123')
os.getcwd()
os.chdir('e:\\hello')
os.makedirs('hi')
os.path和os常用函数:
os.path.abspath(path)将返回参数的绝对路径的字符串,这是将相对路径转化为绝对路径的最佳方法。
os.path.isabs(path)用于判断是否绝对路径,是就返回True
os.path.relpath(path,start)将返回从start到path的相对路径的字符串。如果没有提供start则以当前目录作为start
os.path.dirname(path)将返回一个字符串包含path参数中最后一个斜杠之前的所有内容。
os.path.basename(path)将返回一个字符串包含path参数中最后一个斜杠之后的内容。
os.path.split(path)将返回一个路径的目录名称和基本名称。若需得到路径中每个文件夹的字符串列表,则要使用split方法(不是os.path中的split),并将os.path.sep作为参数
os.path.getsize(path)将返回path参数中文件的字节数。
os.listdir(path)将返回文件名字符串的列表,包含path参数中的每个文件。
os.path.exists(path)若path所指的文件或文件夹存在,则返回True
os.path.isfile(path)若path所指的是一个文件且存在,则返回True。
os.path.isdir(path)若path所指的是一个文件夹且存在,则返回True。
2.文件读写过程。
3个步骤:
(1)调用open()函数,返回一个File对象。
(2)调用File对象的read()或write()方法。
(3)调用File对象的close()方法。
文件读取:
如果希望将整个文件的内容读取为一个字符串值,就使用File对象的read()方法。或者使用readlines()方法,从该文件获得一个字符串的列表,每个字符串就是文本中的每一行。
文件写入:
写入文件时,需要用'w'(写入模式)或者'a'(添加模式)打开文件,获得一个File对象。
3.用shelve模块保存变量。
利用shelve模块,可以将python程序中的变量保存到二进制的shelf文件中。这样程序就可以从硬盘恢复变量的数据。
eg.
import shelve
shelfFile = shelve.open('mydata')
team=['Arsenal','Liverpool','Bacelona']
shelfFile['team']=team
shelfFile.close()
稍后可以使用shelve模块重新打开这些文件并取出数据。shelf值不必用读模式或者写模式打开,因为它们打开之后既能读又能写。
eg.
import shelve
shelfFile=shelve.open('mydata')
shelfFile['team'] --->['Arsenal','Liverpool','Bacelona']
shelfFile.close()
如同字典一样,shelf值也有keys()和values()方法,返回shelf中键和值的类似列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将他们传递给list()函数,去的列表的形式。
4.几个常用的其他函数:
random.shuffle():该函数会重新随机排列传递给他的列表中的值。
random.sample():该函数可以从一个列表中随机选出若干个你所需要的值。第一个参数是你希望选择的列表,第二个参数是你希望选择的值的个数。
5.文件整理:使用shutil模块
shutil模块中包含一些可以帮助复制,移动,改名和删除文件的函数。
(1)复制文件和文件夹:
调用shutil.copy(source,destination),将source处的文件复制到路径destination处的文件夹。如果destination是一个文件名,它将作为被复制文件的新名字。该函数返回一个字符串表示被复制文件的路径。
shutil.copytree()将复制整个文件夹,以及它包含的文件夹和文件。
(2)文件和文件夹的移动和改名:
调用shutil.move(source,destination),将路径source处的文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
destination也可以指定一个文件名,此时文件移动时被改名。
(3)文件和文件夹的删除。
用os.unlink(path)可以删除path处的文件。
用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空,其中没有任何文件或文件夹。
用shutil.retree(path)将删除path处的文件夹,它包含的所有文件和文件夹都会被删除。
(4)使用send2trash模块安全删除:
使用第三方的send2trash模块会将文件夹和文件发送到回收站,而不是永久删除它们。这样如果不小心误操作,也可以从回收站中恢复。
(5)使用os.walk()遍历目录:
当需要遍历目录树时候,可以使用os模块的walk()函数。该函数被传入一个文件夹路径在循环的每次迭代中,返回三个值:
*当前文件夹名称的字符串。
*当前文件夹中子文件夹的字符串列表。
*当前文件夹中文件的字符串列表。
当文件夹中还存在有子目录,就会一直迭代下去。当然,工作目录并不会随着walk函数的迭代而改变。
6.ZIP文件处理:
(1)读取zip文件
要读取Zip文件的内容,首先要创建一个类似于File对象的ZipFile对象。ZipFile对象有一个namelist()方法,会返回ZIP文件中包含的所有文件和文件夹的字符串列表。这些字符串可以传递给ZipFile对象的getinfo()方法,返回一个关于特定文件的ZipInfo对象。里面有很多属性。例如演示的file_size和compress_size属性
(2)解压缩:
使用ZipFile对象的extractall()方法解压所有文件和文件夹,放在当前目录。也可以给该方法传递一个文件夹名称,将文件和文件夹解压缩到该文件夹内。
ZipFile对象的extract()方法可以解压单个文件。传递给该方法的文件必须匹配namelist()返回的字符串列表中的一个,也可以向extract()传递第二个参数,作为destination。
(3)添加压缩文件和创建Zip文件:
要创建Zip文件,要以'w'模式打开ZipFile对象。向write()方法传入一个路径,程序就会压缩该路径所指的文件,添加到新的Zip中。
write()方法的第一个参数是一个字符串,代表要添加的文件名。第二个参数是“压缩类型”,告诉计算机是用什么算法压缩文件。
若以'a'模式打开ZipFile对象,则可以将文件添加到原有的Zip文件中。